錢能版c++關於成員初始化相關章節,以乙個學生學號類的**引出,如下:
#includeusing
namespace
std;
//學號類
class
studentid
}; //學生類
class
student
}; int
main()
我們已經知道,如上所示,為id重新指派,達不到目的的。
根據個人愚見,可以這樣換種思維考慮這個問題,
這裡id作為學生類裡面的乙個成員屬性,他是studentid類的物件,它的初始化借助於該類的建構函式,
作為子級別,它的建構函式理應發生在student的建構函式之前(設想組裝乙個玩具人偶,我們是不是需要把身體的部件提前準備好呢。)
studentid-->student
於是引出了成員初始化列表這個東東,形式:
student(type a,type b....):id(b){}
有點像studentid id(b);**********====>置於student()之前。
本例沒有提供:id(b)其實就等同於:id()
會呼叫對應的無參形式的建構函式。
可能有人說,既然是在student初始化之前(或者嚴格說是在使用studentid之前,準備好不就行了嗎,比如放在student建構函式開始處啦),通過建構函式,不行了,如上面那種,等於又構造了乙個區域性物件,可以用個set之類的重新賦值,如下:
student(string n="匿名",int ssid=0):id()
修改**如下:
studentid:
void set(int v)
void print()
student:
student(string n="匿名",int ssid=0)
但這種分離式脫離建構函式本身了,區別就是
int a=123;
與int a; a=123;的區別了。
而且有時候,這種方式還不行,比如常量和引用,只能初始化一次。
這就說明了」成員初始化列表「引出的目的。
//學號類class
studentid
... ....
C 成員初始化列表
類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...
初始化C 類成員
問題 我的問題是關於初始化c 類成員的。我見過許多這樣的 包括在你的欄目中也見到過 csomeclass csomeclass x 0 y 1 而在別的什麼地方則寫成下面的樣子 csomeclass csomeclass x 0 y 1 我的一些程式設計師朋友說第二種方法比較好,但他們都不知道為什麼...
C 成員初始化列表
c 初始化類的成員,不僅可以用constructor完成,也可以用初始化類成員列表來完成。有些情況只能用第一種,而且通常第一種效率高些。兩者區別 1,普通變數編譯器會預設替你初始化。它們既能初始化,也能被賦值,而常量const按照其意思只能被初始化,不能賦值。所有const member只能用成員初...