EasyC++,成員初始化列表
成員初始化列表
除了可以使用構(gòu)造函數(shù)對(duì)類成員進(jìn)行初始化之外,C++還提供了另外一種初始化的方法,叫做成員初始化列表。
我們假設(shè)Classy是一個(gè)類,而mem1,mem2和mem3都是這個(gè)類的數(shù)據(jù)成員,那么類構(gòu)造函數(shù)可以寫成:
- Classy::Classy(int n, int m): mem1(n), mem2(0), mem3(n*m+2) {
- ...
- };
上述代碼將mem1初始化為n,將mem2初始化為了0,mem3初始化成了n*m+2。這些初始化工作是對(duì)象創(chuàng)建是完成的,并且在執(zhí)行花括號(hào)中的內(nèi)容之前。
有這么幾點(diǎn)需要注意:
- 這種格式只能用于構(gòu)造函數(shù)
- 必須用這種格式初始化非靜態(tài)const數(shù)據(jù)成員(C++11之前)
- 必須用這種格式初始化引用數(shù)據(jù)成員
數(shù)據(jù)成員被初始化的順序和它們?cè)陬愔卸x的順序相同,和初始化列表中的排列順序無(wú)關(guān)。
C++11的類內(nèi)初始化
C++11當(dāng)中允許我們直接對(duì)成員變量進(jìn)行賦值:
- class Classy {
- int mem1 = 10;
- const int mem2 = 20;
- };
這和在構(gòu)造函數(shù)當(dāng)中使用成員初始化列表等價(jià):
- Classy::Classy() : mem1(0), mem2(20) {...}
我們?cè)陬惍?dāng)中直接初始化之后,我們也可以在成員初始化列表當(dāng)中進(jìn)行覆蓋:
- Classy::Classy(int n) : mem1(n) {...}
在這種情況下,mem1的值會(huì)被替換成n。