預設建構函式
把那種不需要傳參的建構函式,稱為預設建構函式
例如:
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...