建構函式是一類特殊的成員函式,它的目的是完成物件的初始化。建構函式的名字和類名相同,可以有引數,但不能有返回型別。
class classname
classname(引數列表2);
};/*建構函式也可以在類外定義*/
classname::classname(引數列表2)
物件的初始化總會通過某個建構函式來完成,即使沒有明確地定義建構函式,編譯器也會為類生成乙個預設建構函式。建構函式避免了專門寫初始化函式,也可以保證初始化工作總被呼叫,以防止出現物件沒有初始化而導致程式出錯的情況。
建構函式遵循過載原則,可以提供多個建構函式,支援多種初始化方式。建構函式也接受訪問控制符的限定,往往都被設定為public
可見性,以支援使用它們進行初始化。但在一些情況(例如singleton
模式)中,建構函式也常設定為private
可見性。
同c語言一樣,每乙個物件都要進行初始化,否則程式在執行過程中有可能產生難以預料的結果,甚至造成程式崩潰。對於內建基本資料型別的物件,初始化工作與c語言一樣,在定義該物件時直接為其指定初值。而對於非靜態的非內建基本資料型別的物件(靜態成員變數需要在類宣告體外定義),其初始化工作則由其建構函式來完成。確保在建構函式中物件的每乙個成員都被初始化。
非靜態成員變數的初始化發生在建構函式的函式體執行之前,因此,以下列方式實現的並不是對成員變數的初始化,而是賦值。
/*****************************************
* member_initialization.cpp *
* *
* c++的成員變數的初始化 *
*****************************************/
#include using namespace std;
class member
};int main()
使用成員初始化列表可以實現非靜態成員變數的初始化,其一般形式為:
class classname
};
使用這樣的初始化時往往具有更高的效率。
/*****************************************
* member_initialization_1.cpp *
* *
* c++的成員變數的初始化 *
*****************************************/
#include using namespace std;
class member
};int main()
c++總是依據非靜態成員變數的宣告順序來進行初始化,為避免可能的因次序問題引起的迷惑,建議在初始化列表中也依據成員變數的宣告順序排列這些成員變數。
析構函式也是一種特殊的成員函式,在物件銷毀時自動呼叫,以完成一些善後工作,例如釋放分配的記憶體,釋放申請的資源等。析構函式的名字是在類的名字前加上符號~
,沒有引數和返回值。
class classname
public:
/*析構函式*/
~classname()
};
析構函式只能有乙個,如果沒有定義析構函式,編譯器會自動為該類生成乙個預設析構函式。當具有自由儲存期限的物件離開作用域或被清除時,析構函式都將隱式呼叫。對於使用new
建立的物件,必須使用delete
顯式呼叫析構函式。
/****************************************
* constructor_deconstructor.cpp *
* *
* c++的建構函式和析構函式 *
****************************************/
#include
/*使用預設建構函式和析構函式的類*/
class testdefault
;/*定義了析構函式和多個建構函式的類*/
class testconsanddecons
testconsanddecons(int _i)
~testconsanddecons()
};void testautoscope()
int main()
bjarne stroustrup著,裘宗燕譯. c++程式語言(特別版).機械工業出版社 2009 C 類建構函式 析構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...
C 類建構函式 析構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...
C 類建構函式 析構函式
類的建構函式是類的一種特殊的成員函式,它會在每次建立類的新物件時執行。建構函式的名稱與類的名稱是完全相同的,並且不會返回任何型別,也不會返回 void。建構函式可用於為某些成員變數設定初始值。下面的例項有助於更好地理解建構函式的概念 include using namespace std class...