C++重載技術之函數重載

來源:互聯網
上載者:User

在C語言中,我們如果需要列印整型,浮點型和字串型資料,需要編寫不同函數名的函數來完成相應的功能,如下所示:

void print_int(int);

void print_float(float);

void print_string(char str[]);

這三個函數分別完成整型,浮點型和字串型資料的輸出操作。在C語言中,對於函數的標識是通過函數名來進行標識的。

但是在C++中,由於這三個函數雖然輸出的資料不一樣,但是,其功能是一樣的,所以並不滿足於用上述方式分別為各種資料分別編寫函數,為瞭解決這種問題,C++提供了重載技術,各種建構函式的實現就是重載技術的典型應用。

那麼在C++中又是對同名函數怎樣實現重載的呢?C++編譯器又是怎麼識別和調用正確的函數的呢?

繼續上面的例子,列印程式可以如下:

void print(int);

void print(float);

void print(string);

編譯器在看到這三個具有相同函數名的函數後,如果不使用參數對函數進行區分,編譯器將這三個函數的名稱重新改變成:

_print_int;

_print_float;

_print_string;

於是編譯器便能夠唯一的標識他們。

       對於每一個函數,都是由函數名、函數參數、函數傳回值組成,C++既然可以使用函數名和函數參數結合的方式來唯一的標識函數,那麼為什麼不能使用函數傳回值呢?我想,對於兩個擁有相同函數名和參數的函數,如果傳回值不相同,C++也可以在函數返回時進行強制類型轉換,所以編譯器不能識別到底調用什麼函數。當然除了上面介紹的方法識別函數外,還有通過函數範圍的方法來識別函數。

如下所示:

class A

{

       public:

      A()

       {cout<<”A() is in class A”<<endl;}

}

 

void A()

{cout<<”A() in main()”<<endl;}

 

上面兩個同名同參數的函數,一個是類的成員函數,一個是全域函數,雖然名字和參數相同,但是其定義的位置不同,所以實際上他們仍是兩個不同的函數,在使用類成員函數時需要使用範圍操作符“::”。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.