建構函式與析構函式

2021-08-19 03:48:41 字數 2636 閱讀 2751

建立乙個物件時,常常需要作某些初始化的工作,例如對資料成員賦初值。

注意,類的資料成員是不能在宣告類時初始化的。

如果乙個類中所有的成員都是公用的,則可以在定義物件時對資料成員進行初始化。如:

class

time

;time

t1=;

//將t1初始化為14:56:30

這種情況和結構體變數的初始化是差不多的,在乙個花括號內順序列出各公用資料成員的值,兩個值之間用逗號分隔。但是,如果資料成員是私有的,或者類中有private或protected的成員,就不能用這種方法初始化。

這裡的幾個例子(

c++物件導向程式設計舉例

)是用成員函式來對物件中的資料成員賦初值的(例如例8.3中的set_time函式)。從例8.3中可以看到,使用者在主函式中呼叫set_time函式來為資料成員賦值。如果對乙個類定義了多個物件,而且類中的資料成員比較多,那麼,程式就顯得非常臃腫煩瑣。

為了解決這個問題,c++提供了

建構函式(constructor)

來處理物件的初始化。

建構函式是一種特殊的成員函式,與其他成員函式不同,不需要使用者來呼叫它,而是在建立物件時自動執行。

建構函式的名字必須與類名同名,而不能由使用者任意命名,以便編譯系統能識別它並把它作為建構函式處理。它不具有任何型別,不返回任何值。建構函式的功能是由使用者定義的,使用者根據初始化的要求設計函式體和函式引數。

【例9.1】在例8.3基礎上定義構造成員函式。

#include

using

namespace std;

class

time

void

set_time();

void

show_time();

private

:int hour;

int minute;

int sec;};

void time::

set_time()

void time::

show_time()

intmain()

程式執行的情況為:

10 25 54↙  (從鍵盤輸入新值賦給t1的資料成員)

10:25:54    (輸出t1的時、分、秒值) 

0:0:0   (輸出t2的時、分、秒值)

在類中定義了建構函式time,它和所在的類同名。在建立物件時自動執行建構函式,它的作用是對該物件中的資料成員賦初值0。

請不要誤認為是在宣告類時直接對程式資料成員陚初值(那是不允許的),賦值語句是寫在建構函式函式體中的,只有在呼叫建構函式時才執行這些賦值語句,對當前的物件中的資料成員賦值。

上面是在類內定義建構函式的,也可以只在類內對建構函式進行宣告而在類外定義建構函式。將程式中的第4~7行改為下面一行:

time( ); //對建構函式進行宣告

在類外定義建構函式:

time::

time()

//在類外定義構造成員函式,要加上類名time和域限定符「::」

有關建構函式的使用,有以下說明:

析構函式(destructor)

也是乙個特殊的成員函式,它的作用與建構函式相反,它的名字是類名的前面加乙個「~」符號。

在c++中「~」是位取反運算子,從這點也可以想到,析構函式是與建構函式作用相反的函式。

當物件的生命期結束時,會自動執行析構函式。

具體地說如果出現以下幾種情況,程式就會執行析構函式:

#include

#include

using

namespace std;

class

student

//宣告student類

~student()

//定義析構函式

//輸出有關資訊

void

display()

//定義成員函式

private

:int num;

string

name;

char ***;};

intmain()

程式執行結果如下:

constructor called.    (執行stud1的建構函式) 

num: 10010    (執行stud1的display函式)

name:wang_li

***: f

constructor called.    (執行stud2的建構函式)

num: 10011     (執行stud2的display函式)

name:zhang_fun

***:m

destructor called. the num is 10011.    (執行stud2的析構函式)

destructor called. the num is 10010.    (執行stud1的析構函式)

建構函式與析構函式

建構函式 主要作用就是為物件初始化。有一點要說的是,在繼承體系彙總,如果在建構函式中,如果沒有指定基類的建構函式,那麼編譯器會在建構函式開頭加入,基類的預設建構函式,這樣就可以初始化基類物件部分 析構函式 對於析構函式,要說的多點,實際也不太複雜,就是加入了virtual 使其具有了多型性質 inc...

建構函式與析構函式

建構函式 先看看建構函式的呼叫順序規則,只要我們在平時程式設計的時候遵守這種約定,任何關於建構函式的呼叫問題都能解決 建構函式的呼叫順序總是如下 1.基類建構函式。如果有多個基類,則建構函式的呼叫順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。2.成員類物件建構函式。如果有多個成...

建構函式與析構函式

概述 乙個類有兩種特殊的成員函式 建構函式與析構函式。建構函式功能是在建立物件時,給資料成員賦初值,即物件的初始化。析構函式的功能是釋放乙個物件,在物件刪除前,用它做一些記憶體釋放工作,與建構函式的功能相反。建構函式 在物件建立時它會被自動執行,因此變數 物件的初始化 一般都放在建構函式中。1 物件...