C 成員物件和封閉類

2021-10-03 20:06:25 字數 1136 閱讀 2097

有其他類的物件作為 成員物件的類叫封閉類。

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

具體做法是通過封閉類的建構函式的初始化列表。

封閉類物件生成時,先執行所有物件成員的建構函式,然後才執行封閉類的建構函式。

物件成員的構造函式呼叫次序和物件成員在類中的說明次序一致,與它們在成員初始化列表中的出現次序無關。

當封閉類物件消亡時,先執行封閉類的析構函式,然後再執行成員物件的析構函式。次序和建構函式的呼叫順序相反。其原因是如果封閉類帶的析構函式中使用到了成員物件的內容,那麼先執行成員物件的析構函式,就可能會導致封閉類的析構函式在執行時發生不可預估的錯誤。

封閉類建構函式例項。

class

ctyre

// init list};

class

cengine

;class

ccar

;ccar::

ccar

(int p,

int tr,

int tw)

:price

(p),

tyre

(tr, tw)

intmain()

如果 ccar 類不定義建構函式,則 ccar car; 將出現編譯錯誤

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

car.engine 初始化沒有問題,用預設建構函式

生成封閉類物件的語句 -> 明確「物件中的成員物件」-> 如何初始化

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

類名::建構函式(參數列)

:成員變數1

(參數列)

, 成員變數2

(參數列),.

..

呼叫順序

當封閉類物件生成時,

首先:執行所有成員物件的建構函式

最後:執行封閉類的建構函式

成員物件的構造函式呼叫順序

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

2.與在成員初始化列表**現的順序無關

當封閉類的物件消亡時,

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

最後:執行成員物件的析構函式

成員物件和封閉類

成員物件 乙個類的成員變數是另乙個類的物件 包含成員物件的類叫封閉類 enclosing class ctyre 初試化列表 class cengine class ccar ccar ccar int p,int tr,int w price p tyre tr,w int main 如果ccar...

成員物件和封閉類

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

c 初始化成員列表 C 成員物件和封閉類

成員物件與封閉類 類裡有其他物件則該物件叫 成員物件 有成員物件的類叫 封閉類 上例中,如果 ccar 類不定義建構函式,則會使用預設的無參建構函式,那麼下面的語句會編譯出錯 ccar car 因為編譯器不明白 ccar 類中的 tyre 成員物件該如何初始化。而 engine 成員物件的初始化則沒...