關於函數重載__函數

來源:互聯網
上載者:User

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.