一、類的成員變數有兩種初始化方式:
一是建構函式體內進行賦值;二是初始化列表進行初始化。
初始化列表以乙個冒號開始,以逗號分隔資料列表,每乙個元素要初始化的值都在括號中。
class date
private:
int _year;
int _month;
int _day;
};
二、初始化列表更高效
嘗試執行以下**,
在上面的**中,並未對自定義物件_t進行初始化,系統自動呼叫了time類的建構函式。那麼它是在什麼時候呼叫的呢?
事實上,無論我們是否使用初始化列表對變數進行初始化,系統都會走一遍初始化列表,初始化列表是成員變數定義且建立的階段,自定義型別_t在這個列表中定義且建立的時候自動呼叫了time類的預設的建構函式。
所以,在對變數進行初始化時,要盡量使用初始化列表進行初始化。
三、必須在初始化列表進行初始化的變數
以下三種必須在初始化列表進行初始化:
編譯下面的**,編譯不會通過,因為沒有在初始化列表對上述三種變數進行初始化。
class time
private:
int _hour;
};class date
private:
int _year;
int _month;
int _day;
const int a; //常量成員變數
int& b; //引用型別的成員變數
time _t; //沒有預設建構函式的類成員變數
};
四、成員變數按宣告次序進行初始化,而非初始化列表的先後次序
發現年列印出來是隨機值,因為初始化列表是先對年進行初始化。
C 初始化列表深入探索
1.當初始化乙個引用的成員 2.當初始化乙個const的成員 3.當呼叫乙個基類的物件 該類繼承於基類 且基類有含有引數的建構函式時 4.當呼叫乙個類的物件成員時,且該物件成員所在的類有含有引數的建構函式時 通過下面的 可以更詳細的說明這四種情況 include using namespace st...
建構函式初始化列表
建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...
建構函式初始化列表
c 程式語言中有很多比較重要的概念值得我們去深入 比如今天為大家介紹的有關c 建構函式的相關概念。這一方面的知識在實際程式設計中就是乙個比較重要的應用技術。希望能個大家可以從中學到一些知識。c 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化...