首先來看一段**
這是某個類的定義(簡單定義):
class
queue
;
接著初始化類建構函式:
queue::
queue
(int qs)
上述**無法正常執行,原因在於qszie這一點,他是常量,只能初始化而不能賦值,原因如下:
正常的呼叫建構函式的內部順序是:①呼叫建構函式②建立物件③首先給類的成員變數分配記憶體,自動初始化④執行建構函式內部的**。所以,c++有特殊的語法來完成這種情況的初始化,叫做成員初始化列表因此,對於qsize來說因為是const型別,必須在建立物件時初始化,而不能在大括號內部在初始化。同理可參考引用的初始化。
queue::
queue
(int qs,
int a)
:qsize
(qs)
,belong
(a)//qsize和belong是成員變數,qs和q是將要初始化的值
當然,這種形式只能用於建構函式當中!
在c++11中可以以更直觀的方式進行初始化,即在類的內部進行初始化,這等價於成員列表初始化
class
classy
//等價於
classy::
classy()
:men1(10
),men2(20
)
C 成員初始化列表
類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...
C 成員初始化列表
c 初始化類的成員,不僅可以用constructor完成,也可以用初始化類成員列表來完成。有些情況只能用第一種,而且通常第一種效率高些。兩者區別 1,普通變數編譯器會預設替你初始化。它們既能初始化,也能被賦值,而常量const按照其意思只能被初始化,不能賦值。所有const member只能用成員初...
C 初始化成員列表
c 在類的建構函式中,可以兩種方式初始化成員資料 data member 1,在建構函式的實現中,初始類的成員資料。諸如 class point int getx int gety 2,還可以定義初始化成員列表 initializer list 來初始化成員資料 data member 改寫建構函式...