C++中的函數(shù)重載
在實際的代碼編寫當中,有時候?qū)τ谕粋€功能函數(shù),可能處理的對象類型不同,則需要重新實現(xiàn)一遍這個函數(shù),這樣下去就顯得代碼更加繁多,C++為了解決這一問題,而支持函數(shù)重載來解決這個問題。
比如一個算術(shù)求和的問題,需要自定義一個函數(shù),用來接收傳入數(shù)據(jù)的并求和,但作為獨立的一個模塊,如何知道調(diào)用方,傳入什么類型的數(shù)據(jù)呢?可能是整型數(shù)據(jù),當然也可能是浮點類型的數(shù)據(jù),還可能是一個整數(shù)一個浮點型(還不知道哪一個是整型,哪一個是浮點型),而周全的做法是各種類型的形參的函數(shù)都要定義一個,即兩個int類型的、兩個double類型的、第一個int第二個double的、及第一個double第二個int的,定義四個函數(shù)來實現(xiàn),比如名字叫:Add_double_double()、Add_int_double()、Add_int_int()、Add_double_int()等等,這看起來能不混亂嗎?
那么,C++中函數(shù)重載的出現(xiàn),則很好的解決這個問題,函數(shù)重載即兩個或以上的函數(shù),函數(shù)名相同,但形參類型或個數(shù)不同,編譯器根據(jù)調(diào)用方傳入的參數(shù)的類型和個數(shù),自動選擇最適合的一個函數(shù)來進行綁定調(diào)用,自動實現(xiàn)選擇。
例如剛才加法的例子:
#include<iostream> using namespace std; int add(int a,int b) { cout<<"(int ,int)\t"; return a+b; } double add(double a,double b) { cout<<"(doble ,double)\t"; return a+b; } double add(double a,int b) { cout<<"(double ,int)\t"; return a+b; } double add(int a,double b) { cout<<"(int ,double)\t"; return a+b; } int main() { cout<<add(2,3)<<endl; cout<<add(2.9,15.3)<<endl; cout<<add(10,9.9)<<endl; cout<<add(11.5,5)<<endl; return 0; }
運行結(jié)果如下:
請大家仔細閱讀代碼,為了確認哪個函數(shù)得到執(zhí)行,我們在函數(shù)內(nèi)部加了一句cout的輸出語句,用來區(qū)分哪個函數(shù)得到調(diào)用。
大家一定自行上機實驗理解代碼!
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程