class myclass
private:
int a;
int b;
const int max;
對於const資料成員,我們不能像常規的那樣使用建構函式來初始化,也就是不能像下面的e.g那麼做。對此,c++提供了特殊的語法來初始化const資料成員---成員初始化列表。
首先,來看看為什麼不能這麼做?
e.gmyclass(int c) //myclass的建構函式
a =0;
b =0;
mac = c;//no,這裡出錯。
我們都知道const變數一定要在建立的時候初始化:
const int num = 1;//yes
const int num;
num = 1;//no
接下來談談在建構函式中為什麼不能使用max = c之類的賦值語句為const成員提供值。
從概念上講,呼叫建構函式時,物件在程式進入建構函式函式體之前被建立。也就是說,呼叫建構函式的時候,先建立物件,再進入函式體。對於myclass()建構函式來說,先為三個成員分配記憶體,然後再進入函式體之心賦值語句。
對於max成員來說,就類似於const int max; max =c;
這對於const成員來說是不行的,const成員應該在分配記憶體的時候進行初始化。對此,c++提供了初始化列表語法來完成這項工作。
使用語法不做詳述。
注意事項:
1,初始值可以是常值或構造函式引數,並且這種方法不限於初始化常量,也可以用於初始化其他成員。
但是引用成員和const成員必須使用這種方法(c++11中提供了更直觀的方式)。普通資料成員既可以使用這種方法,也可以使用普通的方法。
myclass(int x):a(0),b(0),max(x)
或者myclass(int x):max(x)
a =0;b = 0;
2,只有建構函式可以使用初始化列表語法,另外,引用資料成員與const資料成員必須使用這種語法,因為他們在建立時初始化。
注意:不能將初始化列表語法用於其他類方法。
c++11提供了更直觀的方式進行初始化。
class myclass
int mem1 = 0;
const int mem2 = 2;
這與在建構函式中使用初始化列表語法等價
成員初始化列表語法
class myclass 對於const資料成員,我們不能像常規的那樣使用建構函式來初始化,也就是不能像下面那麼做。對此,c 提供了特殊的語法來初始化const資料成員 成員初始化列表。首先,來看看為什麼不能這麼做?myclass int c 我們都知道const變數一定要在建立的時候初始化 co...
C 成員初始化列表的語法
如果classy是乙個累,而mem1 mem2 mem3都是這個類的資料稱源,則類建構函式可以使用如下的語法來初始化資料成員 classy classy int n,int m mem1 n mem2 0 mem3 n m 2 上述 將mem1初始化為n,將mem2初始化為0,將mem3初始化為n ...
C 成員初始化列表
類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...