1. 程式人生 > >C++ 多重繼承 虛基類

C++ 多重繼承 虛基類

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

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

MI帶來的兩個主要問題:

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

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

例如:

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

通常可以將派生類物件地址賦給基類指標,現在將出現二義性:

singingwaiter ed;

worker * pw = ed;

通常這種賦值將把基類指標設定為派生物件中的基類物件地址,但ed 中包含兩個worker 物件,有兩個地址可供選擇, 所以應使用型別轉換來指定物件:

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.通過優先規則解決名稱二義性。