成員物件與封閉類
類裡有其他物件則該物件叫 「成員物件」,有成員物件的類叫「封閉類」。
上例中,如果 ccar 類不定義建構函式,則會使用預設的無參建構函式,那麼下面的語句會編譯出錯:
ccar car;
因為編譯器不明白 ccar 類中的 tyre 成員物件該如何初始化。而 engine 成員物件的初始化則沒問題,因為用 cengine 類的預設建構函式即可。
任何生成封閉類物件的語句,都要讓編譯器明白,物件中的成員物件,是如何初始化的。
具體的做法是:
通過封閉類的建構函式的初始化列表。
構造和析構順序
封閉類物件生成時,先執行所有成員物件的建構函式,然後才執行封閉類的建構函式。
成員物件的建構函式執行順序,與在封閉類定義成員物件的順序一致。
當封閉類的物件消亡時,只需要記住一句話:先構造的物件,後析構。
所以由於封閉類是最後才被構造的,所以封閉類物件最先析構。
通過下面的**的例子,就更能明白封閉類和成員函式的構造和析構的順序了:
執行結果:
ctyre 建構函式
cengine 建構函式
ccar 建構函式
ccar 析構函式
cengine 析構函式
ctyre 析構函式
封閉類的複製建構函式
輸出結果:
a 建構函式
a 複製建構函式
●編號774,輸入編號直達本文
●輸入m獲取文章目錄
c語言與c++程式設計
分享c/c++技術文章
C 初始化成員列表
c 在類的建構函式中,可以兩種方式初始化成員資料 data member 1,在建構函式的實現中,初始類的成員資料。諸如 class point int getx int gety 2,還可以定義初始化成員列表 initializer list 來初始化成員資料 data member 改寫建構函式...
C 建構函式初始化成員列表
1.只能在建構函式初始化列表初始化的成員變數的型別?a.const成員變數 b.引用型別的成員變數 c.static不能在初始化列表中進行初始化 d.類成員變數中有自定義型別的變數最好在初始化列表中進行初始化 2.初始化列表的順序?初始化列表的初始化順序是依據類成員變數定義的順序來決定的。3.關於s...
C 中建構函式初始化成員列表總結
1.只能在建構函式初始化列表初始化的成員變數的型別?a.const成員變數 b.引用型別的成員變數 c.static不能在初始化列表中進行初始化 d.類成員變數中有自定義型別的變數最好在初始化列表中進行初始化 2.初始化列表的順序?初始化列表的初始化順序是依據類成員變數定義的順序來決定的。3.關於s...