c++的建構函式有三項工作:
1、分配空間。
2、成員初始化。
3、執行初始化函式體。
為了提高效率和其他原因,還引入了初始化列表,初始化列表的呼叫在函式體執行之前被呼叫,常用於類組合和類繼承,僅能用於建構函式和拷貝建構函式。 c++中建構函式初始化列表的使用方法:
派生類名::派生類名(基類1 形參,基類2 形參,...基類n 形參,本類形參): 基類1(引數), 基類2(引數), ...基類n(引數),物件資料成員的初始化
本類成員賦初值語句;
c++中建構函式初始化列表的使用場合:
1、當類關係是組合時,為作為成員的物件隱式呼叫建構函式,產生有名物件之用。此時初始化列表為建構函式傳遞實參。
2、當類關係是繼承時,為作為子類組成部分的父類成員顯式呼叫建構函式,產生無名物件之用。此時初始化列表也為建構函式傳遞實參。
3、也可以為類自身的資料成員賦初值之用。尤其是為「常資料成員」和「引用型資料成員」初始化時之用。原因是:const就是防止被錯誤賦值的,引用型別必須定義賦值在一起。
使用初始化列表的好處:
1 、為初始化基類傳遞引數,使其能夠有參初始化基類。
2、提高組合類成員的初始化效率。因為初始化列表比把組合成員放在建構函式中初始化,省略了呼叫組合成員物件的賦值建構函式,同時也省略了因為顯式呼叫組合成員的建構函式而生成的臨時物件。
舉例如下:
class base
;base::base(int i)
class a
;a::a(base b):rb(b),cb(b)
C 建構函式的初始化列表
1.有三種情況下是一定要用初始化列表的,單類的資料成員裡面有const成員,或者有資料成員是引用,或 者有沒有預設建構函式的類成員。const和引用成員可以被初始化,但不可以被賦值。而如果乙個類成員沒 有用初始化列表初始化的時候,編譯器在進入建構函式的第一條語句前會先呼叫類成員的預設建構函式。而如果...
C 建構函式的初始化列表
在c 中,乙個簡單的建構函式可以如下所示 class x c 也提供了另外一種初始化成員變數的寫法,即初始化列表 class x 第二種寫法,就是建構函式初始化列表。那麼問題來了,為什麼要使用這個方法來寫建構函式呢?有什麼好處嗎?那就要從c 的變數初始化說起。首先,c 變數初始化有2種方法,直接初始...
c 建構函式的初始化列表
與其他函式不同,建構函式除了有名字,引數列表和函式體之外,還可以有初始化列表,初始化列表以冒號開頭,後跟一系列以逗號分隔的初始化字段。例如 struct foo 初始化列表 初始化類的成員有兩種方式,一是使用初始化列表,二是在建構函式體內進行賦值操作。使用初始化列表主要是基於效能問題,對於內建型別,...