多重繼承(multiple inheritance)是指從多個直接基類中產生派生類的能力。
class d;
class b: public d;
class a: public d;
class c: public b, public a;
上面這段**是有問題的,c繼承了a和b,因為a,b都繼承d。這使得c從a和b中繼承了相同的建構函式。要解決上面問題就要用虛擬繼承格式
格式:class 類名: virtual 繼承方式 父類名
class d;
class b: virtual public d;
class a: virtual public d;
class c: public b, public a;
在虛繼承(virtual inheritance)這種機制下,不論虛基類在繼承體系出現了多少次,在派生類中都只包含唯一乙個共享的虛基類子物件。
含有虛基類的物件的構造順序與一般的順序稍有區別:首先使用提供給最底層派生類建構函式的初始值初始化該物件的虛基類子部分,接下來按照直接基類在派生列表**現的次序依次對其進行初始化。
乙個類可以有多個虛基類。此時,這些虛的子物件按照它們在派生列表**現的順序從左向右依次構造。
編譯器按照直接基類的宣告順序對其依次進行檢查,以確定其中是否含有虛基類。如果有,則先構造虛基類,然後按照宣告的順序逐一構造其他非虛基類。
//基類
class d
~d()
protected:
int d;
};class e
~e()
protected:
int e;
}class b:virtual public d
~b()
protected:
int b;
};class a:virtual public d
~a()
protected:
int a;
};class c:public b, public a, virtual public e
~c()
protected:
int c;
};int main()
C 學習筆記4(繼承 派生 多重繼承)
1 繼承 在乙個已經存在的類的基礎上建立乙個新的類。通過繼承,乙個新建子類從已有的父類那裡獲得父類的特性。從另一角度看,從已有的類 父類 產生乙個新的子類,稱為類的派生。單繼承 乙個派生類只從乙個基類派生 多重繼承 乙個派生類有兩個或多個基類。派生類是基類的具體化,而基類是派生類的抽象。2 宣告派生...
C 學習 多重繼承
多重繼承 允許乙個類有多於乙個直接父類 class son public father1,public father2 遇到的問題 乙個子類沿不同的路徑繼承同乙個父類,容易出現二義性的問題 如何避免多重繼承引起的混淆 域作用運算元 default one來指明來自哪個父類 虛基類 常用 兩個或多個物...
C 學習筆記22 關於多重繼承 介面
c 在語法上直接支援多重繼承 class p1 class p2 class child public p1,public p2 void print class p2 virtual public object 關於介面 絕大多數物件導向語言都不支援多繼承 絕大多數物件導向語言都支援介面的概念 c...