建立乙個物件時,常常需要作某些初始化的工作,例如對資料成員賦初值。
注意,類的資料成員是不能在宣告類時初始化的。
如果乙個類中所有的成員都是公用的,則可以在定義物件時對資料成員進行初始化。如:
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 物件...