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