關於函數重載

一.構成函數重載的條件如下:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章