C++——成員對象和封閉類

有其他類的對象作為 成員對象的類叫封閉類。

任何生成封閉類對象的語句,都要讓編譯器明白,對象中的成員對象,是如何初始化的。

具體做法是通過封閉類的構(gòu)造函數(shù)的初始化列表。


封閉類對象生成時,先執(zhí)行所有對象成員的構(gòu)造函數(shù),然后才執(zhí)行封閉類的構(gòu)造函數(shù)。


對象成員的構(gòu)造函數(shù)調(diào)用次序和對象成員在類中的說明次序一致,與它們在成員初始化列表中的出現(xiàn)次序無關(guān)。


當封閉類對象消亡時,先執(zhí)行封閉類的析構(gòu)函數(shù),然后再執(zhí)行成員對象的析構(gòu)函數(shù)。次序和構(gòu)造函數(shù)的調(diào)用順序相反。其原因是如果封閉類帶的析構(gòu)函數(shù)中使用到了成員對象的內(nèi)容,那么先執(zhí)行成員對象的析構(gòu)函數(shù),就可能會導致封閉類的析構(gòu)函數(shù)在執(zhí)行時發(fā)生不可預估的錯誤。


封閉類構(gòu)造函數(shù)實例。



// ConsoleApplication3.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。

//

#include "pch.h"

#include <iostream>

class Lun_zi

{

public:

Lun_zi(int k,int z);

~Lun_zi();


private:

int kuan;

int zhijing;


};


Lun_zi::Lun_zi(int k,int z)

{

kuan = k;

zhijing = z;

std::cout << "輪子1" << std::endl;

}


Lun_zi::~Lun_zi()

{

std::cout << "輪子2" << std::endl;

}

class yin_qing

{

public:

yin_qing();

~yin_qing();


private:


};


yin_qing::yin_qing()

{

std::cout << "引擎1" << std::endl;

}


yin_qing::~yin_qing()

{

std::cout << "引擎2" << std::endl;

}

class CAR

{

public:

CAR(int money,int k,int z);

~CAR();


private:

Lun_zi l_z;

yin_qing y_q;

int jia_ge;


};


CAR::CAR(int money, int k, int z):l_z

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容