構造和析構

2021-07-15 22:32:32 字數 1377 閱讀 3330

預設建構函式

把那種不需要傳參的建構函式,稱為預設建構函式

例如:

object();
或者建構函式的所有引數都有預設值,也稱為預設建構函式

object(int a=10,int b=11)
有了預設建構函式之後,物件在構造市就可以不傳遞引數

例如:

object obj;
預設建構函式很重要,如果乙個類沒有預設建構函式,則無法構造陣列

class

object

};object objs[4];//錯誤!

所以,一般都要給類定義乙個預設建構函式,以方便使用

如果乙個類沒有寫任何建構函式,則編譯器隱含地生成為其新增乙個,相當於

object::object()

如果沒寫析構函式,則編譯器隱含地生成乙個析構函式

相當於新增了

object::~object()

注意:只有當你沒有寫建構函式的時候,才給隱含地加乙個建構函式,一旦你寫了乙個建構函式,它就不給你加了

成員的初始化與析構

考慮成員變數本身也是class型別的情況:

1. 當物件被構造時,成員變數也被構造(成員變數的建構函式被呼叫)

2. 當物件被析構時,成員變數也被析構(成員變數的析構函式被呼叫)

結論:

一、構造的時候

1. 成員被依次構造:從前到後

2. 先執行成員的建構函式,再執行自己的建構函式

二、析構的時候

1. 成員被依次析構:從後到前

2. 先執行自己的析構函式,再執行成員的析構

初始化列表

可以在建構函式後面直接初始化

1. 以冒號引號

2. 使用小括號來初始化

(1)基本型別的初始化

class object

};

(2)class 型別的初始化

用小括號帶上構造引數

class object

};

初始化和賦值的差別

1.功能上:一樣

2.效能上:「初始化」相對較好,有時可以節省cpu操作

class

object

};

預設建構函式:不需要傳參的建構函式

這個很有用,一般的類都要提供一下預設建構函式

2.構造和析構的順序問題

初始化列表

在建構函式的位置指定成員的初始化引數

構造和析構

當程式設計師呼叫create和destroy時,編譯器會自動在他們兩端插入 classcreate和 classdestroy的 真正實現構造和析構的全域性過程 classcreate和 classdestroy,create和destroy的作用是在構造後和析構前初始化和反初始化物件成員。即乙個物...

構造和析構

類繼承中建構函式和析構函式的呼叫 現在,有三個類,類的定義如下 class ca class cb public ca 這個程式執行結果是 ca constructor cb constructor cc constructor cc desstructor cb desstructor ca de...

C 構造和析構

include using namespace std class b b b b b b int i data i b operator b b private int data b play b b int main output constructed by parameter 5 destr...