|
關(guān)于這個(gè)問(wèn)題是引起來(lái)源于一則面試問(wèn)題:引用型成員變量如何初始化?
回答的不是很確定,于是對(duì)這個(gè)問(wèn)題研究一下。
1、普通的變量:一般不考慮啥效率的情況下 可以在構(gòu)造函數(shù)中進(jìn)行賦值??紤]一下效率的可以再構(gòu)造函數(shù)的初始化列表中進(jìn)行。
class CA { public: int data; …… public: CA(); ……
};
CA::CA():data(0)//……#1……初始化列表方式 { //data = 0;//……#1……賦值方式 };
2、static 靜態(tài)變量:
static變量屬于類(lèi)所有,而不屬于類(lèi)的對(duì)象,因此不管類(lèi)被實(shí)例化了多少個(gè)對(duì)象,該變量都只有一個(gè)。在這種性質(zhì)上理解,有點(diǎn)類(lèi)似于全局變量的唯一性。
class CA { public: static int sum; …… public: CA(); ……
};
int CA::sum=0;//……#2……類(lèi)外進(jìn)行初始化
3、const 常量變量: const常量需要在聲明的時(shí)候即初始化。因此需要在變量創(chuàng)建的時(shí)候進(jìn)行初始化。一般采用在構(gòu)造函數(shù)的初始化列表中進(jìn)行。
class CA { public: const int max; …… public: CA(); …… };
CA::CA():max(100) { …… }
4、Reference 引用型變量: 引用型變量和const變量類(lèi)似。需要在創(chuàng)建的時(shí)候即進(jìn)行初始化。也是在初始化列表中進(jìn)行。但需要注意用Reference類(lèi)型。
class CA { public: int init; int& counter; …… public: CA(); …… };
CA::CA():counter(&init) { …… }
5、const static integral 變量: 對(duì)于既是const又是static 而且還是整形變量,C++是給予特權(quán)的??梢灾苯釉陬?lèi)的定義中初始化。short可以,但float的不可以哦。 class CA { public: //static const float fmin = 0.0;// only static const integral data members can be initialized within a class const static int nmin = 0; …… public: ……
};
總結(jié)起來(lái),可以初始化的情況有如下四個(gè)地方: 1、在類(lèi)的定義中進(jìn)行的,只有const 且 static 且 integral 的變量。 2、在類(lèi)的構(gòu)造函數(shù)初始化列表中, 包括const對(duì)象和Reference對(duì)象。 3、在類(lèi)的定義之外初始化的,包括static變量。因?yàn)樗菍儆陬?lèi)的唯一變量。 4、普通的變量可以在構(gòu)造函數(shù)的內(nèi)部,通過(guò)賦值方式進(jìn)行。當(dāng)然這樣效率不高。
自己整理。如有問(wèn)題,請(qǐng)指正。
|