多重繼承派生類、二義性問題、名字支配規則、虛基類、重載重寫重定義之辨析

多重繼承派生類

參考mooc魏英《c++程序設計》

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

二義性問題

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

名字支配規則

在這裏插入圖片描述
下面這段話很重要,有的書稱之爲重定義,重定義也叫隱藏,類重新定義父類中有相同名稱的非虛函數。重定義不存在二義性。直接使用只能訪問到派生類的成員,想要使用被覆蓋的基類成員就要使用基類名和作用域限定運算符。
在這裏插入圖片描述
在這裏插入圖片描述

虛基類

爲什麼使用虛基類?
我們知道多重繼承會造成二義性問題,那麼當多條繼承路徑上有一個公共的基類,那麼在這些路徑的匯合處,這個公共的基類的成員就會產生多個副本(實例),如果我們只想保存這些基類的一個實例,就可以將這個公共基類說明爲虛基類。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
多重繼承實例:在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

重載重寫重定義之辨析:

重載:overload

是函數名相同,參數列表不同重載只是在類的內部存在。但是不能靠返回類型來判斷。
重載雖然函數名一樣,但是對於編譯器來說其實是不同的函數,重載包括傳入參數個數不同,類型不同等,不能通過返回值不同來判斷。

重寫 override,有繼承纔會涉及override的範疇。

1 重寫的函數不能是static的。必須是virtual的
2 重寫函數必須有相同的類型,名稱和參數列表
3 重寫函數的訪問修飾符可以不同。儘管virtual是private的,派生類中重寫改寫爲public,protected也是可以的

重定義 (redefining)也叫做隱藏://注意和重寫的差異

重定義也叫隱藏,類重新定義父類中有相同名稱的非虛函數
(1) 如果派生類的函數和基類的函數同名,但是參數不同,此時virtual可有可無,基類的函數被隱藏。(假重載,不同範圍)
(2) 如果派生類的函數與基類的函數同名,並且參數也相同,且基類函數沒有vitual關鍵字,基類的函數被隱藏。(假重寫,無virtual)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章