C++多重繼承的構造執行順序
一個類,它可能有基類,也可能存在多個基類,這些類裡面還可能是虛擬基類,並且在類的本身也可能存在對象成員。那麼所涉及的這些類或對象成員會以什麼樣的順序來調用它們各自的建構函式呢?今天我們就來舉例分析下。
執行以下程式:
#include <iostream>using namespace std;class Base{public: Base(){ cout << "The constructor of Base" << endl; }};class VBase{public: VBase(){ cout << "The constructor of VBase" << endl; }};class VBase_{public: VBase_(){ cout << "The constructor of VBase_" << endl; }};/* 普通繼承與虛繼承 */class A : public Base, virtual public VBase_, virtual public VBase{public: A(){ cout << "The constructor of A" << endl; }};class B{public: B(){ cout << "The constructor of B" << endl; }};class D{public: D(){ cout << "The constructor of D" << endl; }};class C : public B, public A{public: C(){ cout << "The constructor of C" << endl; }private: /* 對象成員 */ D obj;};int main(){ /* 執行個體化類 C */ C test = C(); return 0;}
運行結果:
結論
C++多重繼承的構造執行順序:
1.首先執行虛基類的建構函式,多個虛基類的建構函式按照被繼承的順序構造;2.執行基類的建構函式,多個基類的建構函式按照被繼承的順序構造;3.執行成員對象的建構函式,多個成員對象的建構函式按照聲明的順序構造;4.執行衍生類別自己的建構函式;5.析構以與構造相反的順序執行;