一.構成函數重載的條件如下:
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