類(lèi)的構(gòu)造函數(shù)有一個(gè)初始化表,位于函數(shù)參數(shù)表之后,在函數(shù)體之前,發(fā)生在函數(shù)體內(nèi)的任何代碼被執(zhí)行之前,使用規(guī)則如下:
1。如果兩個(gè)類(lèi)之間存在繼承的關(guān)系,
派生類(lèi)必須要在初始化表里調(diào)用基類(lèi)的構(gòu)造函數(shù),默認(rèn)繼承的派生類(lèi)在其函數(shù)的初始化表里隱式調(diào)用的。
如有基類(lèi):class Base{public: Base()};派生類(lèi)Diversed繼承Base:
class Diversed : Base {public
Diversed()};那么Diversed的構(gòu)造函數(shù)可以有兩種寫(xiě)法:Diversed::Diversed(){……};或者Diversed::
Diversed : Base(){……};這兩種方式其實(shí)是相同的,只是一個(gè)是隱式調(diào)用,一個(gè)是顯式調(diào)用。
2。
const常量只能在函數(shù)初始化表里被初始化。因?yàn)閏onst常量在聲明的時(shí)候必須被初始化,但類(lèi)聲明時(shí)是不分配空間的,只有在類(lèi)對(duì)象被創(chuàng)建的時(shí)候才能給類(lèi)成員賦值,所以這個(gè)任務(wù)就交給了類(lèi)構(gòu)造函數(shù)的初始化表來(lái)完成。
-----
引用也只能在初始化表中初始化。
3。數(shù)據(jù)成員的初始化可以采用兩種方式,類(lèi)構(gòu)造函數(shù)的初始化表或者成員函數(shù)體內(nèi),但這兩種效率是不完全相同的。如果是內(nèi)部數(shù)據(jù)類(lèi)型,采用這兩種方式的效率
是相同的,但在成員函數(shù)體內(nèi)的可讀性比較好,所以應(yīng)該采用在成員函數(shù)體內(nèi)初始化。
非內(nèi)部數(shù)據(jù)類(lèi)型應(yīng)該在初始化表里初始化。