C 類的建構函式和析構函式

2021-09-30 12:54:04 字數 2515 閱讀 5209

建構函式是一類特殊的成員函式,它的目的是完成物件的初始化。建構函式的名字和類名相同,可以有引數,但不能有返回型別。

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...