多重繼承與虛基類

2021-09-30 10:18:22 字數 1020 閱讀 5776

多重繼承

前面我們介紹的派生類只有乙個基類,稱為單基派生或單一繼承。在實際運用中,我們經常需要派生類同時具有多個基類,這種方法稱為多基派生或多重繼承。

2.1 多重繼承的宣告:

在 c++ 中,宣告具有兩個以上基類的派生類與宣告單基派生類的形式類似,只需將要繼承的多個基類用逗號分開即可。

在多重繼承中,公有派生和私有派生對於基類成員在派生類的可訪問性與單繼承的規則相同。

另外,對基類成員的訪問必須是無二義的,若兩個基類中具有同名的資料成員或成員函式,使用成員名限定來消除二義性,若派生類中新增成員或成員函式與基類成員或成員函式同名,則派生類會覆蓋外層同名成員,也須使用作用域分辨符。

2.2 多重繼承的建構函式和析構函式:

多重繼承的建構函式的定義形式與單繼承建構函式的定義形式類似,只有 n 個基類的建構函式之間用「,」分隔。

多重繼承的建構函式的執行順序與單繼承建構函式的執行順序相同,也是遵循先執行基類的建構函式,再執行物件成員的建構函式,最後執行派生類建構函式的原則。在多個基類之間,則嚴格按照派生類宣告是從左到右的順序來排列先後。而析構函式的執行順序與建構函式的執行順序相反。

2.3 虛基類 :

如果某個派生類的部分或全部直接基類是從另乙個共同的基類派生而來,在這些基類中,從上一級基類繼承來的成員就有相同的名稱,則在這個派生類中訪問這個共同的基類中的成員時,可能會產生二義性,此時,可定義虛基類。這就要求在其直接基類的定義中,使用關鍵字 virtual 將那個共同的基類定義為虛基類,其語法形式如下:

class  派生類名:   virtual 派生方式 基類

虛基類的初始化與一般的多重繼承的初始化在語法上是一樣的 ,但建構函式的呼叫順序不同,虛基類建構函式的呼叫順序是這樣規定的:

1) 在同一層次中,先呼叫虛基類的建構函式,接下來依次是非虛基類的建構函式,物件成員的建構函式,派生類的建構函式。

2) 若同一層次中包含多個虛基類,這些虛基類的建構函式按對他們說明的先後次序呼叫

3) 若虛基類由非虛基類派生而來,則仍然先呼叫基類建構函式,再呼叫派生類建構函式。

多重繼承 虛繼承與虛基類

一 多重繼承 單重繼承 乙個派生類最多只能有乙個基類 多重繼承 乙個派生類可以有多個基類 class 類名 繼承方式 基類1,繼承方式 基類2,派生類同時繼承多個基類的成員,更好的軟體重用 可能會有大量的二義性,多個基類中可能包含同名變數或函式 多重繼承中解決訪問歧義的方法 基類名 資料成員名 或成...

多重繼承與虛基類

多重繼承 multiple inheritance,mi 虛基類虛基類使得從多個類 它們的基類相同 派生出的物件只繼承乙個基類物件。通過使用關鍵字virtual。例如,可以使worker被用作singer和waiter的虛基類 virtual和public的次序無關緊要 class singer v...

C 多重繼承與虛基類

多重繼承就是乙個派生類繼承了多個基類。i 通過成員初始化列表指定建構函式 class d public b,public c ii 構造函式呼叫順序 class b void f class c void f class d public b,public c void f int main 輸出 ...