C 之多繼承與虛繼承

2022-09-16 02:33:15 字數 907 閱讀 9148

乙個類有多個直接基類的繼承關係稱為多繼承

多繼承宣告語法

class 派生類名 : 訪問控制 基類名1, 訪問控制 基類名2, ...

;

類 c 可以根據訪問控制同時繼承類 a 和類 b 的成員,並新增自己的成員:

如果乙個派生類從多個基類派生,而這些基類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性。 如下圖:

如下圖的分析:

總結:如果乙個派生類從多個基類派生,而這些基類又有乙個共同的基類,則在對該基類中宣告的名字進行訪問時,可能產生二義性。

如果在多條繼承路徑上有乙個公共的基類,那麼在繼承路徑的某處匯合點,這個公共基類就會在派生類的物件中產生多個基類子物件。

要使這個公共基類在派生類中只產生乙個子物件,必須對這個基類宣告為虛繼承,使這個基類成為虛基類。

虛繼承宣告使用關鍵字 virtual

如下虛繼承示例:

C 之多繼承和虛繼承

概述 子類繼承於多個父類。多繼承的格式 class 子類 繼承方式1 父類名1,繼承方式2 父類名2,繼承方式3 父類名3,表示子類 是由 父類名1,父類名2,父類名3.共同派生出來 注意 多繼承容易產生二義性 解決辦法 使用作用域訪問成員 class base1 class base2 class...

C 鑽石繼承與虛繼承

首先,何為鑽石繼承,顧名思義,在類的繼承過程中,繼承結構是乙個類似菱形 鑽石 的結構就屬於鑽石繼承,如下 這是乙個最簡單的鑽石繼承。實際上,在複雜的繼承表中,只要子類按不同的繼承路徑回溯到基類有菱形結構,均屬鑽石繼承。下面先看乙個例子,鑽石繼承在c 程式設計中帶來的問題。1 2 include3 u...

C 多重繼承與虛繼承

在派生類中對基類成員的訪問應該是唯一的。但是,在多繼承情況下,可能造成對基類中某個成員的訪問出現了不一致的情況,這時就稱對基類成員的訪問產生了二義性。派生類在訪問基類成員函式時,由於基類存在同名的成員函式,導致無法確定訪問的是哪個基類的成員函式,因此出現了二義性錯誤。例如 includeusing ...