一.构成函数重载的条件如下:
1.函数名相同。
2.这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,即参数列表不同。
3.返回值类型不同不构成重载函数。
二.重载函数的匹配原则:
1、严格匹配,找到后就调用。
2、没有找到严格匹配的函数,但是可以通过隐式转化,找到适合的重载函数。
例:
1.参数类型不一样
void print(int a)
{
printf("void print(int a)\n");
}
void print(string a)
{
printf("void print(string a)\n");
}
2.参数个数不同(较1)
void print(int a ,string b);
3.参数顺序不同(较2)
void print(string a ,int b);
为了估计哪个重载函数最适合,需要依次按照下列规则来判断:
- 精确匹配:参数匹配而不做转换,或者只是做微不足道的转换,如数组名到指针、函数名到指向函数的指针、T到const T;
- 提升匹配:即整数提升(如bool 到 int、char到int、short 到int),float到double
- 使用标准转换匹配:如int 到double、double到int、double到long double、Derived*到Base*、T*到void*、int到unsigned int;
- 使用用户自定义匹配;
- 使用省略号匹配:类似printf中省略号参数
“同一作用域”也是在函数重载的定义中的一个限定,如果不在一个作用域,不能算是函数重载,如下面的代码:
void f(int); void g() { void f(double); f(1); //这里调用的是f(double),而不是f(int) }
本文只是作粗略基本介绍,了解更多请参照大神http://www.cnblogs.com/skynet/archive/2010/09/05/1818636.html