多重繼承(multiple inheritance,mi)。
虛基類虛基類使得從多個類(它們的基類相同)派生出的物件只繼承乙個基類物件。通過使用關鍵字virtual。
例如,可以使worker被用作singer和waiter的虛基類(virtual和public的次序無關緊要)。
class singer : virtual public worker ;
class waiter : virtual public worker ;
然後,可以將singerwaiter類定義為:
class singerwaiter : public singer, public waiter ;
混合使用虛基類和非虛基類:
當基類是虛基類,派生類將包含基類的乙個子物件;如果基類不是虛基類,派生類將包含多個子物件。當類通過多條虛途徑和非虛途徑繼承某個特定的基類時,該類將包含乙個表示所有的虛途徑的基類子物件和分別表示各條非虛途徑的多個基類子物件。
使用非虛基類時,如果類從不同的類那裡繼承了兩個或更多的同名成員(資料或方法),則使用該成員名時,如果沒有用類名進行限定,將導致二義性。但如果使用了虛基類,則不一定會導致二義性。這時,如果某個名稱優先於(dominate)其它所有名稱,則使用它時,即使不用限定符,也不會導致二義性。
派生類中的名稱優先於直接或間接祖先類中的相同名稱。
mi小結:
使用虛基類的原因:從虛基類的乙個或多個例項派生而來的類將只繼承乙個基類物件。
有間接虛基類的派生類包含直接呼叫間接基類建構函式的建構函式,這對於間接非虛基類來說是非法的。
通過優先規則解決名稱二義性。
多重繼承 虛繼承與虛基類
一 多重繼承 單重繼承 乙個派生類最多只能有乙個基類 多重繼承 乙個派生類可以有多個基類 class 類名 繼承方式 基類1,繼承方式 基類2,派生類同時繼承多個基類的成員,更好的軟體重用 可能會有大量的二義性,多個基類中可能包含同名變數或函式 多重繼承中解決訪問歧義的方法 基類名 資料成員名 或成...
多重繼承與虛基類
多重繼承 前面我們介紹的派生類只有乙個基類,稱為單基派生或單一繼承。在實際運用中,我們經常需要派生類同時具有多個基類,這種方法稱為多基派生或多重繼承。2.1 多重繼承的宣告 在 c 中,宣告具有兩個以上基類的派生類與宣告單基派生類的形式類似,只需將要繼承的多個基類用逗號分開即可。在多重繼承中,公有派...
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 輸出 ...