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