多重繼承派生類
參考mooc魏英《c++程序設計》
二義性問題
名字支配規則
下面這段話很重要,有的書稱之爲重定義,重定義也叫隱藏,類重新定義父類中有相同名稱的非虛函數。重定義不存在二義性。直接使用只能訪問到派生類的成員,想要使用被覆蓋的基類成員就要使用基類名和作用域限定運算符。
虛基類
爲什麼使用虛基類?
我們知道多重繼承會造成二義性問題,那麼當多條繼承路徑上有一個公共的基類,那麼在這些路徑的匯合處,這個公共的基類的成員就會產生多個副本(實例),如果我們只想保存這些基類的一個實例,就可以將這個公共基類說明爲虛基類。
多重繼承實例:
重載重寫重定義之辨析:
重載:overload
是函數名相同,參數列表不同重載只是在類的內部存在。但是不能靠返回類型來判斷。
重載雖然函數名一樣,但是對於編譯器來說其實是不同的函數,重載包括傳入參數個數不同,類型不同等,不能通過返回值不同來判斷。
重寫 override,有繼承纔會涉及override的範疇。
1 重寫的函數不能是static的。必須是virtual的
2 重寫函數必須有相同的類型,名稱和參數列表
3 重寫函數的訪問修飾符可以不同。儘管virtual是private的,派生類中重寫改寫爲public,protected也是可以的
重定義 (redefining)也叫做隱藏://注意和重寫的差異
重定義也叫隱藏,類重新定義父類中有相同名稱的非虛函數
(1) 如果派生類的函數和基類的函數同名,但是參數不同,此時virtual可有可無,基類的函數被隱藏。(假重載,不同範圍)
(2) 如果派生類的函數與基類的函數同名,並且參數也相同,且基類函數沒有vitual關鍵字,基類的函數被隱藏。(假重寫,無virtual)