天天看點

類成員函數的重載 繼承 隐藏

重載

相同的範圍(在同一個類中)

函數名相同

參數不同

virtual關鍵字可有可無

重載與繼承、隐藏很好區分,因為重載函數在同一個類中

舉例說明

<a></a>

結果

類成員函數的重載 繼承 隐藏

繼承

不同的範圍(分别位于基類和派生類)

參數相同

基類必須有virtual關鍵字

隐藏

如果派生類的函數與基類的函數同名、同參數,基類函數不帶有virtual關鍵字

如果派生類函數與基類的函數同名、不同慘,不管基類函數帶不帶virtual關鍵字

歸納起來

   同名前提(不同名免談)

同參+virtual——繼承

同參+無virtual  / 不同參 —— 隐藏

強調:隻要不是繼承(virtural+同參)就是隐藏,隐藏後,如果基類、派生類有相同函數名,派生類對象隻能調用派生類的函數。

 View Code

舉例說明虛函數、隐藏的差別

分析

      動态綁定必須通過基類的引用或指針調用虛函數(virtual)。當這樣做時,編譯器将在基類中查找virtual函數。

假如找到了(同名、同參):就在其派生類中找對應的函數(這就是為什麼必須在基類和派生類中特點是:同名、同參)。

如果找到了就調用派生類的函數

否則乖乖的用基類的虛函數

假如沒找到對應的virtual,就找對應的函數(同名同參),這回隻能在父類中倒騰了,因為根本沒法通過virtual穿越到子類。

      隐藏就不同了,如果基類中連函數原型都沒有,就直接報錯了。如果有:直接調用就得啦(沒有virtural沒法對應派生類的重定義的函數)。

本文轉自jihite部落格園部落格,原文連結:http://www.cnblogs.com/kaituorensheng/p/3248609.html,如需轉載請自行聯系原作者

繼續閱讀