重載
相同的範圍(在同一個類中)
函數名相同
參數不同
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,如需轉載請自行聯系原作者