C 多個物件的構造和析構與初始化列表

2021-10-09 04:14:27 字數 1711 閱讀 3104

初始化列表

在類中定義的資料成員一般都是基本的資料型別。但是類中的成員也可以是物件,我們叫物件成員。

c++中對於物件的初始化是非常重要的操做,當建立乙個物件時候,c++編譯器必須確保呼叫了所有物件成員的建構函式,如果物件成員有預設建構函式編譯器會自動呼叫它們。

1.如果類有成員物件,那麼呼叫的時候先呼叫成員物件的建構函式,在呼叫本身的建構函式,析構函式的呼叫順序相反。

2.成員物件建構函式的呼叫順序和類內定義的順序是一樣的。

3.如果有成員物件,物件例項化時必須保證成員物件的建構函式和析構函式能被呼叫。

class

father

~father()

};class

mather

~mother()

};class

child

~child()

private

: father f;

//物件成員

mother m;

//物件成員};

intmain()

上述講了,如果有對像成員有預設建構函式會自動呼叫它們,如果沒有呢?又或者想呼叫某個建構函式怎麼辦?當我們想讓成員物件屬性初始化的時候是否可以呼叫類的建構函式讓物件成員的屬性初始化嗎?但如果物件成員的屬性是私有的,我們就沒有辦法訪問。

這時候就有了乙個新的解決方法:初始化列表這是對於成員物件呼叫建構函式,c++提供的了專門的語法。

1.初始化列表用途,呼叫物件成員的某個建構函式

2.初始化列表只能寫在建構函式

3.如果使用了初始化列表,那麼所有的建構函式都要寫初始化列表

4.如果有多個物件需要呼叫某個建構函式,可以用逗號分隔開

5.可以使用物件的建構函式傳遞數值給物件成員的變數

class

father

~father()

};class

mather

mother

(int a,

int b)

~mother()

};class

child

/* /*void print():f(10) //會報錯只能在建構函式中使用

*///**************************************

//如果呼叫多個物件成員的建構函式,用逗號分隔開/*

child()

:f(10

),m(

20,30)

//這種情況只能傳固定值 多個物件用逗號分隔*/

//如果想讓每次傳的值不一樣可以這樣傳參

child

(int a,

int b,

int c):f

(a),

m(b, c)

//**************************************

//注意:如果使用了初始化列表,那麼所有的建構函式都要寫初始化列表

child

(const child& c):f

(10),

m(20,

30)~child()

private

: father f;

//物件成員

mother m;

//物件成員};

intmain()

初始化成員列表(引數列表)只能在建構函式使用。

C 多個物件構造 析構 構造和析構的順序

include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...

C 中物件的初始化和清理 建構函式和析構函式

4.2.1 建構函式和析構函式 物件的初始化和清理也是兩個非常重要的安全問題 乙個物件或者變數沒有初始狀態,對其使用後果是未知 同樣的使用完乙個物件或變數,沒有及時清理,也會造成一定的安全問題 c 利用了建構函式和析構函式解決上述問題,這兩個函式將會被編譯器自動呼叫,完成物件初始化和清理工作。物件的...

初始化和清除 從構造和析構說起

to be or not to be that is the question the tragedy of hamlet,prince of denmark 建構函式和析構函式正如 哈姆雷特 那句經典的台詞一樣 to be or not 這句話也十分經典的引出了我的開篇 建構函式 確保初始化 to...