簡體   English   中英

編譯器如何在繼承C ++中進行合成?

[英]How the compiler do composition in inheritance C++?

編譯器如何在繼承中進行合成?
假設我創建一個派生類的對象,其中基類和派生類都通過其他類的composition對象包含。 我想要一些示例來解釋構造函數和析構函數。

考慮到它確實看起來像是家庭作業,我不會為您提供太多便利。 如果您可以仔細考慮並理解下面的內容,請祝您好運...。

調用基類的構造函數,該構造函數將-對於每個成員變量,按照基類中的聲明順序-調用與基類初始化列表中指定的參數相對應的構造函數,或調用默認的構造函數(如果有的話)(否則該成員的未初始化,盡管有時(例如,由於較new (p) T()表示法或static new (p) T() ,對象包含在其中的對象的早期零初始化(無論如何將始終保證特定的值)。 然后,派生的構造函數對其自己的數據成員執行相同的操作。 破壞發生的順序相反。

如果您需要證明基本原理,則可以使用以下幾種變體:

struct M {  // Marker
    int id;
    M(int i) : id(i) { cout << "\tconstruction M" <<id<< endl; }
    ~M() { cout << "\tdestruction M" <<id<< endl; }
};

struct B { //Base 
    M mb;
    B() : mb(1) { cout << "construction B (body finished)" << endl; }
    ~B() { cout << "destruction B (body finished)" << endl; }
};
struct D : public B { //Derived 
    M md;
    D() : md(2) { cout << "construction D (body finished)" << endl; }
    ~D() { cout << "destruction D (body finished)" << endl; }
};

當然,它是經過簡化的,但是它表明基數是在派生之前構造的,成員是在構造函數體執行之前構造的。 它也表明破壞是按照相反的順序進行的。

但這只是最明顯的。 您還應該顯示一些示例,這些示例演示在存在多個成員時按什么順序構造成員,以及在多重繼承中發生的情況以及靜態成員的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM