C 多重繼承 虛基類

2021-08-22 19:42:30 字數 955 閱讀 6662

使用多個基類的繼承被稱為多重繼承(mi)。

mi描述的是有多個直接基類的類。與單繼承一樣,公有mi表示的也是 is--a關係。

mi帶來的兩個主要問題:

1. 從兩個不同的基類繼承同名方法。

2. 從兩個或更多相關基類那裡繼承同一類的多個例項。

例如:

singer 和 waiter都繼承了乙個worker 元件,因此singingwaiter將包含兩個worker元件。

singingwaiter ed;

worker * pw = ed;

worker * pw1 = (waiter *) & ed;

worker * pw2 = (singer *) & ed;

這將使得使用基類指標來引用不同的物件(多型性)複雜化。

c++引入多重繼承的同時,也引入了虛基類

虛基類使得從多個類(它們的基類相同)派生出的物件只繼承乙個基類物件。

例如:在通過在類宣告中使用關鍵字virtual ,可以使worker被用作singer和waiter的虛基類(virtual 和 public次序無緊要關係)。

class singer : virtual public worker

class waiter : public virtual worker

然後將singingwaiter類定義為:

class singingwaiter : public singer, public waiter 

為實現這種特性,必須滿足其他要求:

1. 有間接虛基類的派生類包含直接呼叫間接基類建構函式的建構函式,這對於間接非虛基類來說是非法的。

2.通過優先規則解決名稱二義性。

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 輸出 ...

c 筆記 多重繼承 虛基類

虛基類多重繼承建構函式規則 多重繼承也成mi,描述的是有多個直接基類的類。和單繼承一樣,公有mi表示的也是is a關係。必須使用關鍵字public限定每乙個基類 除了非特別之處,編譯器預設為私有派生 singerwaiter類繼承自singer和waiter,而singer和waiter有這共同的祖...

多重繼承 虛繼承與虛基類

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