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