C 建構函式 ,初始化列表

2021-05-24 22:09:27 字數 1161 閱讀 7124

c++中的類的建構函式:

1.如果類中沒有定義建構函式,編譯器將生成乙個預設建構函式,這個預設建構函式會呼叫類中所有成員的預設建構函式,但不會對如int,double的基本資料型別做初始化;

2.類中可以定義多個建構函式,但每個建構函式應該有不同的引數實現;

3.預設建構函式必須定義的情況,當需要定義乙個物件陣列時,預設建構函式必須定義,因為系統會為每個物件分配空間並呼叫其預設建構函式,此時不能呼叫其它的建構函式;如:objectdemo tempdemo[10];//此時objectdemo必須有預設建構函式

預設建構函式就是0引數的建構函式;

初始化列表的使用:

1.初始化列表的格式,

objectdemo::objectdemo():mvalue(10),mstring("test") //此時mvalue,mstring的值使用初始化列表進行初始化

2.初始化列表的效率比建構函式中賦初值高,因為初始化列表在分配記憶體的同時給變了賦值,建構函式需要建立物件後再呼叫建構函式賦值;

3.const變數賦初值必須使用初始化列表,

class objectdemo

const int kdefaultmax;//當然你也可以直接在這裡賦值,但是他就不能隨特定物件改變了。

objectdemo::objectdemo():kdefaultmax(1000)

4.還有如下情況也要使用初始化列表

a.資料型別為引用資料成員時;

class objectdemo

int &tempdata; //引用資料成員

b.沒有預設建構函式的物件資料成員;

class objectdemo

objectbuff mobjectbuff; //objectbuff物件沒有預設建構函式

objectdemo::objectdemo():mobjectbuf(10*1024)

c.沒有預設建構函式的超類;

class objectdemo:objectparent //此父類沒有預設建構函式

objectdemo::objectdemo():objectparent("good boy")

後面三個不知道正不正確,知道的告訴我下,呵呵。

5.初始化列表有個重要問題需要清楚,變數被初始化的順序不是初始化列表中的順序,而是類中變數的定義順序進行的。

C 建構函式初始化列表

從概念上講,可以認為建構函式分兩個階段進行 1.初始化階段 2.普通的計算階段。計算階段由建構函式函式體中的所有語句組成 不管成員是否在建構函式初始化列表中顯示初始化,類型別的資料成員總是在初始化階段初始化。初始化發生在計算階段的開始之前。建議 使用建構函式初始化列表 注 必須對任何const或引用...

C 建構函式初始化列表

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exam...

C 建構函式初始化列表

建構函式初始化列表是乙個重要的概念,這一步是建構函式執行時無論如何也要走的一步。建構函式可以說成三部分構成,1 引數列表 2 初始化列表 3 函式體。其中初始化列表是可選的。在一定情況下不需要初始化列表。以下是c primer上面的一段 sales item sales item const str...