C++中的函式重載
在實際的程式碼編寫當中,有時對於同一個功能函數,可能處理的物件類型不同,則需要重新實作一遍這個函數,這樣下去就顯得程式碼更加繁多,C++為了解決這個問題,而支援函數重載來解決這個問題。
例如一個算術求和的問題,需要自訂函數,用來接收傳入資料的並求和,但作為獨立的一個模組,如何知道呼叫方,傳入什麼類型的資料呢?可能是整數數據,當然也可能是浮點類型的數據,還可能是一個整數一個浮點型(還不知道哪一個是整數,哪一個是浮點型),而周全的做法是各種類型的形參的函數都要定義一個,即兩個int類型的、兩個double類型的、第一個int第二個double的、及第一個double第二個int的,定義四個函數來實現,例如名字叫:Add_double_double()、Add_int_double()、Add_int_int()、Add_double_int()等等,這看起來能不混亂嗎?
那麼,C++中函數重載的出現,則很好的解決這個問題,函數重載即兩個或以上的函數,函數名相同,但形參類型或個數不同,編譯器根據呼叫方傳入的參數的型別和個數,自動選擇最適合的一個函數來進行綁定調用,自動實現選擇。
例如剛才加法的例子:
#include<iostream>usingnamespacestd;intadd(inta,intb){cout<<(int,int)t;returna+b;}doubleadd(doublea,doubleb){cout<<(doble,double)t;returna+ b;}doubleadd(doublea,intb){cout<<(double,int)t;returna+b;}doubleadd(inta,doubleb){cout<<(int,double)t;returna+b;}intmain (){cout<<add(2,3)<<endl;cout<<add(2.9,15.3)<<endl;cout<<add(10,9.9)<<endl;cout<<add(11.5,5 )<<endl;return0;}
運行結果如下:
請大家仔細閱讀程式碼,為了確認哪個函數得到執行,我們在函數內部加了一句cout的輸出語句,用來區分哪個函數得到呼叫。
大家一定是自行上機實驗理解程式碼!