函数重载是什么?
是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数(函数返回值不能区分重载)
为什么要函数重载?
减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处
C++中为什么不将函数返回类型考虑到函数重载中?
这样设计能够保证函数调用能够独立于上下文,不依赖与上下文
重载函数的调用时如何匹配的?
为了估计哪个重载函数最适合,需要依次按照下列规则来判断:
1、精确匹配:参数匹配而不做转换,或者只是做微不足道的转换,如数组名到指针、函数名到指向函数的指针、T到const T;
2、提升匹配:即整数提升(如bool 到 int、char到int、short 到int),float到double
3、使用标准转换匹配:如int 到double、double到int、double到long double、Derived*到Base*、T*到void*、int到unsigned int;
4、使用用户自定义匹配;
5、使用省略号匹配:类似printf中省略号参数
void print(int);
void print(const char*);
void print(double);
void print(long);
void print(char);
void h(char c,int i,short s, float f)
{
print(c);//精确匹配,调用print(char)
print(i);//精确匹配,调用print(int)
print(s);//整数提升,调用print(int)
print(f);//float到double的提升,调用print(double)
print('a');//精确匹配,调用print(char)
print(49);//精确匹配,调用print(int)
print(0);//精确匹配,调用print(int)
print("a");//精确匹配,调用print(const char*)
}