成員初始化列表語法

2021-10-21 17:26:14 字數 1649 閱讀 6081

class

myclass

對於const資料成員,我們不能像常規的那樣使用建構函式來初始化,也就是不能像下面那麼做。對此,c++提供了特殊的語法來初始化const資料成員—成員初始化列表。

首先,來看看為什麼不能這麼做?

myclass

(int c)

我們都知道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)

2,只有建構函式可以使用初始化列表語法,另外,引用資料成員與const資料成員必須使用這種語法,因為他們在建立時初始化。

注意:不能將初始化列表語法用於其他類方法。

c++11提供了更直觀的方式進行初始化。

class myclass

;

這與在建構函式中使用初始化列表語法等價。

如果classy是乙個累,而mem1、mem2、mem3都是這個類的資料稱源,則類建構函式可以使用如下的語法來初始化資料成員:

classy::

classy

(int n,

int m)

:mem1

(n),

mem2(0

),mem3

(n*m +2)

上述**將mem1初始化為n,將mem2初始化為0,將mem3初始化為n*m+2。從概念上說,這些初始化工作是在物件建立時完成的,此時還未執行括號中的任何**。請注意以下幾點:

* 這種格式只能用於建構函式

* 必須用這種格式來初始化非靜態const資料稱源(至少在c++11之前是這樣的);

* 必須用這種格式來初始化引用資料稱源。

資料成員被初始化的順序與它們出現在類宣告中的順序相同,與初始化器中的排列順序無關。

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

class myclass private int a int b const int max 對於const資料成員,我們不能像常規的那樣使用建構函式來初始化,也就是不能像下面的e.g那麼做。對此,c 提供了特殊的語法來初始化const資料成員 成員初始化列表。首先,來看看為什麼不能這麼做?e.g...

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 ...

成員初始化列表

類物件的構造順序是這樣的 1.分配記憶體,呼叫建構函式時,隱式 顯示的初始化各資料成員 初始化階段可以是顯式的或隱式的,取決於是否存在成員初始化表。隱式初始化階段按照宣告的順序依次呼叫所有基類的預設建構函式,然後是所有成員類物件的預設建構函式。2.進入建構函式後在建構函式中執行一般計算 計算階段由建...