成員物件和封閉類

2021-08-23 14:14:34 字數 1089 閱讀 3161

·成員物件:乙個類的成員變數是另乙個類的物件

·包含成員物件的類叫封閉類(enclosing)

class ctyre//初試化列表

};class cengine;

class ccar;

ccar::ccar(int p, int tr, int w):price(p),tyre(tr, w);

int main()

·如果ccar不定義建構函式,則

ccar car;//error---編譯出錯

·編譯器不知道car.tyre該如何初始化

·car.engine的初始化沒有問題:用預設建構函式(無引數)

·生成封閉類物件的語句---明確「物件中的成員物件」

---如何初始化

·定義封閉類的建構函式時,新增初始化列表

類名::建構函式(參數列):成員變數1(參數列),成員變數2(參數列),...

·成員物件初始化列表中的引數

·任意複雜的表示式

·函式/變數/表示式中的函式,變數有定義

·當封閉類物件生成時

·s1:執行所有成員物件的建構函式

·s2:執行封閉類的建構函式

·成員物件的夠贊函式呼叫順序

·和成員物件在類中的說明順序一致

·與在成員初始化列表中出現的順序無關

·當封閉類的物件消亡時

·s1:先執行封閉類的析構函式

·s2:執行成員物件的析構函式

·析構函式順序和建構函式的呼叫順序相反

class ctyre

~ctyre()

};class cengine

~cengine()

};class ccar

~ccar()

};int main()

程式的輸出結果是:

cengine contructor

ctyre contructor

ccar contructor

ccar destructor

ctyre destructor

cengine destructor

成員物件和封閉類

成員物件和封閉類 乙個類的成員變數如果是另乙個類,就稱之為成員物件。包含成員物件的類叫做封閉類。當封閉類的物件產生並初始化時,它包含的成員物件也需要被初始化,這時就會引發對成員物件 建構函式的呼叫。如何讓編譯器知道到底是使用哪個建構函式初始化的呢?這可以通過在定義封 閉類的建構函式時,新增初始化列表...

C 成員物件和封閉類

有其他類的物件作為 成員物件的類叫封閉類。任何生成封閉類物件的語句,都要讓編譯器明白,物件中的成員物件,是如何初始化的。具體做法是通過封閉類的建構函式的初始化列表。封閉類物件生成時,先執行所有物件成員的建構函式,然後才執行封閉類的建構函式。物件成員的構造函式呼叫次序和物件成員在類中的說明次序一致,與...

三 類與物件提高 成員物件和封閉類

乙個類的成員是其他類的物件,就把這樣的成員成為成員物件 有成員物件的類叫 封閉 enclosing 類 class ctyre 輪胎類 後初始化列表,可以對成員進行初始化 class cengine 引擎類 class ccar 汽車類 封閉類 ccar ccar int p,int tr,int ...