c 中的成員初始化列表語法

2021-09-12 06:24:14 字數 1155 閱讀 9101

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.進入建構函式後在建構函式中執行一般計算 計算階段由建...