繼承中建構子和析構函數的呼叫順序
在繼承的物件導向程式設計中,理解建構子和析構函數的調用順序至關重要。在處理多個基類和物件組合時,這一點變得尤為重要。
考慮以下類別層次結構:
struct A { A() { cout << "A() C-tor" << endl; } ~A() { cout << "~A() D-tor" << endl; } }; struct B : public A { B() { cout << "B() C-tor" << endl; } ~B() { cout << "~B() D-tor" << endl; } A a; };
在主函數中:
int main() { B b; }
這裡是管理此繼承層次結構中構造函式與析構函式呼叫順序的規則:
建構函式呼叫:
析構函式呼叫:
析構函式呼叫順序相反建構函式呼叫順序的順序:
預設初始化列表:
即使沒有明確定義的初始化列表,成員字段也會在派生類別構造函數之前初始化被稱為。在這種情況下,a將被初始化為A的預設建構子。
因此,main函數中程式碼的預期輸出將是:
A() C-tor A() C-tor B() C-tor ~B() D-tor ~A() D-tor ~A() D-tor
以上是C 繼承中如何呼叫建構函式和析構函式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!