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


class MyClass

{

private:

  int a;

  int b;

  const int max;

.....

}

對於const數據成員,我們不能像常規的那樣使用構造函數來初始化,也就是不能像下面的e.g那么做。對此,c++提供了特殊的語法來初始化const數據成員---成員初始化列表。

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

e.g

MyClass(int c)

{

  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;

};

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM