·成員物件:乙個類的成員變數是另乙個類的物件
·包含成員物件的類叫封閉類(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 ...