初始化列表(深入探索建構函式)

2021-08-17 11:18:15 字數 1388 閱讀 7902

一、類的成員變數有兩種初始化方式:

一是建構函式體內進行賦值;二是初始化列表進行初始化。

初始化列表以乙個冒號開始,以逗號分隔資料列表,每乙個元素要初始化的值都在括號中。

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 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化...