第8課 - 函數重載分析(上)

一、重載

同一個標識符在不同的上下文有不同的意義;如:

“洗”和不同的詞彙搭配後有不同的含義;如洗衣服,洗臉,洗腦,洗馬桶。。。。。。

“play”和不同的單詞搭配後有不同的含義;如play chess,play piano,play basketball…

二、C++中的函數重載

用同一個函數名定義不同的函數,當函數名和不同的參數搭配時函數的含義不同 。如圖1代碼所示:

                        圖1

函數重載至少滿足下面的一個條件:

  1. 參數個數不同;
  2. 參數類型不同;
  3. 參數順序不同;

C++編譯器調用重載函數的準則,是將所有同名函數作爲候選者,嘗試尋找可行的候選函數,通過以下三個準則來匹配:

  1. 精確匹配實參;
  2. 通過默認參數能夠匹配實參;
  3. 通過默認類型轉換匹配實參;

重載函數匹配失敗的情況如下:

  1. 最終尋找到的候選函數不唯一,則出現二義性,編譯失敗;
  2. 無法匹配所有候選者,函數未定義,編譯失敗;

重載函數匹配失敗的代碼如圖2所示:

                    圖2

三、函數重載的注意事項

重載函數在本質上是相互獨立的不同函數,重載函數的函數類型不同,函數返回值不能作爲函數重載的依據。函數重載是由函數名和參數列表決定的。圖3的代碼是分別打印重載函數的入口地址,執行結果如圖4所示。得到了兩個不同的地址,說明重載函數在本質上是相互獨立的不同函數。

                                         圖3

               圖4

四、小結

  1. 函數重載是C++中引入的概念;
  2. 函數重載用於模擬自然語言中的詞彙搭配;
  3. 函數重載使得C++具有更豐富的語義表達能力;
  4. 函數重載的本質爲相互獨立的不同函數;
  5. C++中通過函數名和函數參數確定函數調用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章