C 中類成員初始化規則

2021-10-03 18:01:20 字數 808 閱讀 2704

類中成員(非靜態成員)什麼時候被初始化?關於初始化有哪些情況?

成員變數在類例項化時被初始化,通過建構函式來進行初始化。

關於初始化需要注意的地方有三點:

變數在類中有初始值

初始化成員列表

建構函式

類成員初始化的順序如下:

如果類中沒有定義任何的建構函式,則編譯器將採用合成的預設構造來初始化類中的成員

如果類中定義了建構函式,則將呼叫對應的建構函式進行初始化,如果該建構函式有初始化成員列表則

注意:如果某個類有了帶參的建構函式,則編譯器不會為類合成預設建構函式,但是良好的程式設計習慣最好為每個類寫出預設建構函式,防止該類物件預設初始化時儲存

為什麼需要初始化成員列表(c++11後可以採用類內初始值初始化)?

在執行建構函式體前,每個成員變數會進行預設初始化,(如果有類內初始值,則用初始值初始化)

如果沒有初始化成員列表,則對於沒有預設建構函式的類物件成員,或者常量成員,或者引用成員則無法完成初始化,從而報錯

初始化成員列表初始化的順序只和成員變數在類中宣告的順序有關。

從c++11開始類中各自成員所支援的初始化如下表:

type

normal

const

static

static const

引用(包括常引用)

在類內宣告初始化是是

否否(static const int 可以)

是初始化列表初始化是是

否否是建構函式裡初始化是否

否否否類外初始化否否

是是否注:在c++11以前,不允許普通型別在類內宣告時初始化

初始化C 類成員

問題 我的問題是關於初始化c 類成員的。我見過許多這樣的 包括在你的欄目中也見到過 csomeclass csomeclass x 0 y 1 而在別的什麼地方則寫成下面的樣子 csomeclass csomeclass x 0 y 1 我的一些程式設計師朋友說第二種方法比較好,但他們都不知道為什麼...

C 類中成員變數初始化

c 類中成員變數包括主要四種 普通成員變數,常量成員變數,靜態成員變數,靜態常量成員變數 上述成員變數該如何初始化,注意不是賦值。由於普通成員變數和常量成員變數,每乙個類例項化,都乙份記憶體拷貝。c 規定成員變數在宣告 注意宣告與定義區別 時,不允許初始化,因此這些變數只能放在建構函式初始化列表中。...

c 中成員物件初始化和類繼承初始化

對於繼承的物件,建構函式在成員初始化列表中使用類名來呼叫特定的基類建構函式。對於成員物件,建構函式則使用成員名。例如 ifndef h frabjous define h frabjous include class frabjous virtual void tell gloam gloam in...