一、重載
同一個標識符在不同的上下文有不同的意義;如:
“洗”和不同的詞彙搭配後有不同的含義;如洗衣服,洗臉,洗腦,洗馬桶。。。。。。
“play”和不同的單詞搭配後有不同的含義;如play chess,play piano,play basketball…
二、C++中的函數重載
用同一個函數名定義不同的函數,當函數名和不同的參數搭配時函數的含義不同 。如圖1代碼所示:
圖1
函數重載至少滿足下面的一個條件:
- 參數個數不同;
- 參數類型不同;
- 參數順序不同;
C++編譯器調用重載函數的準則,是將所有同名函數作爲候選者,嘗試尋找可行的候選函數,通過以下三個準則來匹配:
- 精確匹配實參;
- 通過默認參數能夠匹配實參;
- 通過默認類型轉換匹配實參;
重載函數匹配失敗的情況如下:
- 最終尋找到的候選函數不唯一,則出現二義性,編譯失敗;
- 無法匹配所有候選者,函數未定義,編譯失敗;
重載函數匹配失敗的代碼如圖2所示:
圖2
三、函數重載的注意事項
重載函數在本質上是相互獨立的不同函數,重載函數的函數類型不同,函數返回值不能作爲函數重載的依據。函數重載是由函數名和參數列表決定的。圖3的代碼是分別打印重載函數的入口地址,執行結果如圖4所示。得到了兩個不同的地址,說明重載函數在本質上是相互獨立的不同函數。
圖3
圖4
四、小結
- 函數重載是C++中引入的概念;
- 函數重載用於模擬自然語言中的詞彙搭配;
- 函數重載使得C++具有更豐富的語義表達能力;
- 函數重載的本質爲相互獨立的不同函數;
- C++中通過函數名和函數參數確定函數調用。