C++派生类含有成员对象构造函数析构函数顺序
生活随笔
收集整理的這篇文章主要介紹了
C++派生类含有成员对象构造函数析构函数顺序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考博客:傳送門1
當類中含有對象成員時:
- 類的構造函數要包含對成員對象的初始化,如果構造函數的成員初始化列表沒有包含對成員對象的初始化,系統會自動調用成員對象的無參構造函數。順序上:先調用成員對象的構造函數,當所有的成員對象都執行了自身類的構造函數以后再執行當前類的構造函數
- 調用析構函數時先調用類的構造函數,再調用成員對象的構造函數。
當類繼承于另一個類時:
- 如果沒有顯式地在構造函數的成員初始化列表中調用基類的構造函數,會自動先調用基類的無參構造函數。
- 析構的時候先調用派生類的析構函數,再調用基類的構造函數。
當類中含有成員對象,同時繼承了某個類的時候,他們的構造函數析構函數的順序是固定的(與成員初始化列表中的順序沒有關系):
構造函數:基類->成員對象->派生類
析構函數:派生類->成員對象->基類
例如:
#include<iostream> #include<cstdio> using namespace std;class A { public:A(){cout << "A" << endl;}~A(){cout << "~A" << endl;} };class C { public:C(){cout << "C" << endl;}~C(){cout << "~C" << endl;} };class B:public A {C c; public:B(){cout << "B" << endl;}~B(){cout << "~B" << endl;} };int main() {B b; }運行結果:
總結
以上是生活随笔為你收集整理的C++派生类含有成员对象构造函数析构函数顺序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有一台漂亮却很懒的女人和一台丑却很勤快的
- 下一篇: LOL延迟不高,但是很卡,前期是正常的,