C++ 成員對象和封閉類
小林coding
成員對象與封閉類
類里有其他對象則該對象叫 「成員對象」,有成員對象的類叫「封閉類」。
上例中,如果 CCar 類不定義構(gòu)造函數(shù),則會使用默認的無參構(gòu)造函數(shù),那么下面的語句會編譯出錯:
CCar car;
因為編譯器不明白 CCar 類中的 tyre 成員對象該如何初始化。而 engine 成員對象的初始化則沒問題,因為用 CEngine 類的默認構(gòu)造函數(shù)即可。
任何生成封閉類對象的語句,都要讓編譯器明白,對象中的成員對象,是如何初始化的。
具體的做法是:
通過封閉類的構(gòu)造函數(shù)的初始化列表。
構(gòu)造和析構(gòu)順序
封閉類對象生成時,先執(zhí)行所有成員對象的構(gòu)造函數(shù),然后才執(zhí)行封閉類的構(gòu)造函數(shù)。
成員對象的構(gòu)造函數(shù)執(zhí)行順序,與在封閉類定義成員對象的順序一致。
當封閉類的對象消亡時,只需要記住一句話:先構(gòu)造的對象,后析構(gòu)。
所以由于封閉類是最后才被構(gòu)造的,所以封閉類對象最先析構(gòu)。
通過下面的代碼的例子,就更能明白封閉類和成員函數(shù)的構(gòu)造和析構(gòu)的順序了:
執(zhí)行結(jié)果:
CTyre 構(gòu)造函數(shù)
CEngine 構(gòu)造函數(shù)
CCar 構(gòu)造函數(shù)
CCar 析構(gòu)函數(shù)
CEngine 析構(gòu)函數(shù)
CTyre 析構(gòu)函數(shù)
封閉類的復(fù)制構(gòu)造函數(shù)
當封閉類執(zhí)行復(fù)制構(gòu)造函數(shù)時,成員對象也會執(zhí)行對應(yīng)的復(fù)制構(gòu)造函數(shù),參考下面的代碼例子:
輸出結(jié)果:
A 構(gòu)造函數(shù)
A 復(fù)制構(gòu)造函數(shù)
C++ this指針的理解和作用
C++ static靜態(tài)成員
小林coding
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!