C++多重繼承的構造執行順序

來源:互聯網
上載者:User

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.析構以與構造相反的順序執行;

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.