C 錢能版解讀之成員初始化困惑

2021-09-21 20:17:10 字數 1206 閱讀 4303

錢能版c++關於成員初始化相關章節,以乙個學生學號類的**引出,如下:

#include 

using

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只能用成員初...