在建立class a的乙個物件的時候,拿new運算子來說,他總是會先去請求一塊該物件期望大小的記憶體,然後呼叫class a的建構函式並傳入所申請記憶體的位址作為this指標完成構造。
如果class a有其他類型別的成員變數,或者繼承自其他類的話,他們的構造順序又會是怎樣的呢?下邊是測試**:
class a
~a()
};class b
~b()
};class c
~c()
};class d: public a
~d()
private:
b b1;
c c1;
};void main()
執行結果:
從結果可以看出c++的構造順序:
1、呼叫父類的建構函式
2、按照宣告的順序依次構造成員
3、呼叫類本身的建構函式
析構順序:
1、呼叫類本身的析構函式
2、按照宣告的相反順序依次析構
3、呼叫父類的析構函式
至此,我們可以看出c++的構造和析構函式的呼叫順序是完全對稱的,即後構造的會先析構,整個過程類似乙個棧,藉此來保證物件的完整性。
還有,如果建構函式使用了初始化列表,如果順序和成員宣告順序不同,也還是會按照宣告順序構造,而且編譯器會給出警告。
C 多個物件構造 析構 構造和析構的順序
include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...
C 建構函式 析構函式順序
1 輸入以下程式,分析執行結果。2 修改上面的4個類,新增析構函式,在析構函式中輸出各私有資料成員的值。並分析結果。實驗分析以及心得體會 主要是類的多繼承性,在繼承了多個基類之後,派生類物件呼叫的建構函式和析構函式的順序,以及在派生關係中同名函式的隱藏關係,根據實驗結果可以發現派生類物件在呼叫建構函...
C 類構造與析構順序
1.虛基類建構函式被呼叫,以繼承順序從左到右 如果存在虛基類 2.上一層非虛基類建構函式被呼叫,以繼承順序從左到右而非成員初值列上寫的順序 顯示呼叫或缺省構造 如果存在非虛基類 3.虛表指標指向適當虛表 如果類存在虛表指標 4.類資料成員初始化,以宣告的順序而非成員初值列上寫的順序。5.執行使用者所...