乙個類的成員是其他類的物件,就把這樣的成員成為成員物件
有成員物件的類叫 封閉(enclosing)類
class
ctyre
//輪胎類
// : 後初始化列表,可以對成員進行初始化};
class
cengine
//引擎類
;class
ccar
//汽車類(封閉類)
;ccar::
ccar
(int p,
int tr,
int w)
:price
(p),
tyre
(tr, w)
//tyre的初始化
;
上例中,如果ccar類不定義建構函式,則下面的語句會編譯出錯: ccar car;
因為編譯器不明白,car. tyre 該如何初始化。car. engine的初始化沒問題,用預設建構函式即可
任何生成封閉類物件的語句,都要讓編譯器明白,物件中的成員物件,是如何初始化的。
具體做法為:通過封閉類的建構函式的初始化列表。
成員物件初始化列表中的引數可以是任意表示式,包括函式、變數,只要表示式中的函式or變數有定義即可
1、封閉類物件生成時,先執行所有物件成員的建構函式,然後再執行封閉類的建構函式
2、物件成員的構造函式呼叫次序和物件成員在類中的說明次序一致,與他們在成員初始化列表**現的次序無關。
3、當封閉類的物件消亡時,先執行封閉類的析構函式,然後再執行成員物件的析構函式。次序與建構函式相反。
成員物件和封閉類
成員物件 乙個類的成員變數是另乙個類的物件 包含成員物件的類叫封閉類 enclosing class ctyre 初試化列表 class cengine class ccar ccar ccar int p,int tr,int w price p tyre tr,w int main 如果ccar...
成員物件和封閉類
成員物件和封閉類 乙個類的成員變數如果是另乙個類,就稱之為成員物件。包含成員物件的類叫做封閉類。當封閉類的物件產生並初始化時,它包含的成員物件也需要被初始化,這時就會引發對成員物件 建構函式的呼叫。如何讓編譯器知道到底是使用哪個建構函式初始化的呢?這可以通過在定義封 閉類的建構函式時,新增初始化列表...
C 成員物件和封閉類
有其他類的物件作為 成員物件的類叫封閉類。任何生成封閉類物件的語句,都要讓編譯器明白,物件中的成員物件,是如何初始化的。具體做法是通過封閉類的建構函式的初始化列表。封閉類物件生成時,先執行所有物件成員的建構函式,然後才執行封閉類的建構函式。物件成員的構造函式呼叫次序和物件成員在類中的說明次序一致,與...