最近在找工作的过程中,发现很多平时没有注意的问题,反省之后,决定好好把基础知识过一过。
重载函数的定义:出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数。
这里有两个地方需要注意:同一个作用域,形参表不同。形参表不同的意思就是形参个数不同,或者参数类型不同。
重载确定分三步:
1.确定候选函数。即确定与调用函数相关的重载函数集合,该集合中的函数就是候选函数。候选函数与被调用函数同名,并且在调用点上,它的声明可见。举个例子。
void f(); void f(int); void f(int,int); void f(double,double = 3.14); f(5.6);调用函数为f(5.6);一共有4个候选函数。
需要注意的是,在调用点上,候选函数的声明可见。举个例子。
void print(const string&); void print(double); void fooBar(int ival) { void print(int); print("Value: "); print(ival); print(3.14); }在fooBar函数中,声明了函数void print(int),这导致外面的两个函数对里面调用print函数来说,都是不可见的,因此,print("Value: ");是错误的,print(3.14);是对的,因为3.14可以转换为int型。在这里,外面的两个print函数不是候选函数,因为他们对调用点来说不是可见的。
2.选择可行函数。选择可行函数必须满足两个条件:第一,函数的形参个数与该调用的实参个数相同。第二,每一个实参的类型必须与对应形参的类型匹配,或者可被隐式转换为对应的形参类型。那么对于f(5.6)来说,可行函数为
void f(int); void f(double,double = 3.14);
原文:http://blog.csdn.net/bing_bing304/article/details/44588589