c ,初始化列表

2021-09-08 11:14:34 字數 1389 閱讀 1998

類物件的構造順序是這樣的:

a.分配記憶體,呼叫建構函式時,隱式/顯示的初始化各資料成員

b.進入建構函式後在建構函式中執行一般計算

1.初始化類的成員有兩種方式,一是使用初始化列表,二是在建構函式體內進行賦值操作。使用初始化列表主要是基於效能問題.  [參考c++ 初始化列表 

對於內建型別,如int, float等,使用初始化類表和在建構函式體內初始化差別不是很大,但是對於類型別來說,最好使用初始化列表,為什麼呢?由上面的測試可知,使用初始化列表少了一次呼叫預設建構函式的過程,這對於資料密集型的類來說,是非常高效的。

2. 除了效能問題之外,有些時場合初始化列表是不可或缺的,以下幾種情況時必須使用初始化列表

基類:class time int getmin() int getsec() protected: int hour; int min ; int sec; };

子類,建構函式宣告:

dtime(int h, int m, int s); dtime(time &t);

class dtime: public

time

void setdate(int

d)

private

: int

date; };

定義建構函式時使用初始化列表:

冒號以後跟以逗號隔開的成員初始化列表

基類初始化時注意,基類中必須要定義有相應形式的建構函式,否則報錯。

錯誤示例:

dtime::dtime(time &t)

:date(2014)//error c2512: 「time」: 沒有合適的預設建構函式可用

//若基類中沒有預設建構函式,初始化列表中必須以自定義的基類建構函式來初始化基類成員。

dtime::dtime(time &t)//此處同宣告一致

:time(t.gethour(), t.getmin(),t.getsec()) //基類初始化

,date(2014) //成員初始化

dtime::dtime(int h, int m, int s) :time(h,m,s) ,date(2014) dtime::dtime(time &t) :time(t.gethour(), t.getmin(),t.getsec()) ,date(2014)

使用:int _tmain(int argc, _tchar* ar**) /*

a construct 1:0:0 a construct 2014-1:0:0 a construct 2014-12:24:25 請按任意鍵繼續. . . */

參考:1. c++ 與「類」有關的注意事項總結(十一): 成員初始化列表(★) 

2. c++ 初始化列表  

c 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的兩個執行階段 從概念上來講,建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段 初始化階段 所有...

C 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。在c 中,struct和class的唯一區別是預設的克訪問性不同,而這裡我們不考慮訪問性的問題,所以下面的 都以struct來演示。struct foo 初始化列表 ...

C 初始化列表

與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。struct foo 初始化列表 建構函式的執行可以分成兩個階段,初始化階段和計算階段,初始化階段先於計算階段。所有類型別 class type 的成員都會在初始化階...