析構函式的特點:
1、析構函式與類名相同,但它前面必須加上波浪號~
2、析構函式不返回任何值,在定義析構函式時,是不能說明它的型別的,甚至說明void型別也不能
3、析構函式沒有引數,因此不能被過載。乙個類可以有多個建構函式,但是只能有乙個析構函式
4、撤銷物件時,編譯系統會自動呼叫析構函式
//例3.13 含有析構函式和建構函式的conplex類
#include
#include
using
namespace
std;
class
complex;
complex::complex(
double r,double i) //
定義建構函式
complex::~complex() //
定義析構函式
double complex::abscomplex() //
定義abscomplex函式
intmain()
說明:(1)每個類必須有乙個析構函式。若沒有顯式的為乙個類定義析構函式,則編譯系統
會自動生成乙個預設的析構函式。例如,編譯系統為類complex生成類似如下述形式的預設
析構函式:complex::~complex(){}
類似於系統自動生成的預設建構函式,這個自動生成的預設析構函式的函式體也是空的,但是
它能完成釋放物件所佔的記憶體空間的任務。
對於大多數類而言,這個預設析構函式就能滿足要求。但是,如果在乙個物件撤銷之前
需求完成另外一些處理工作的話,則應該顯示地定義析構函式,例如:
classstring_data
~string_data(); //
析構函式
void get_info(char *);
void sent_info(char *);
private
:
char *str;
};
這是建構函式和析構函式常見的用法,即在建構函式中用new運算子為字串分配儲存空間
,最後在析構函式中通過delete運算子釋放已分配的儲存空間。
(2)除了在主函式結束(或呼叫exit函式)時,物件被撤銷,系統會自動呼叫析構函式函式
外,在以下的情況下,析構函式也會被呼叫:
a、如果乙個物件被定義在函式體內,則當這個函式被呼叫結束時,該物件將釋放,析構
函式被自動呼叫。
b、若乙個物件是使用new運算子動態建立的,在使用delete運算子釋放它時,delete會
自動呼叫析構函式。
#includeusingnamespace
std;
class
string_data
~string_data() //
析構函式
void get_info(char *);
private
:
char *str;
};void string_data::get_info(char *str1)
intmain()
C 析構函式 虛析構函式
1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...
C 析構函式和虛析構函式。
析構函式如果不是虛的話,基類的析構函式將不會被呼叫。多型時,也就是派生類被基類指標所指,或者被基類別名 虛析構函式,被呼叫時,其自身的析構函式和基類的析構函式都將會被呼叫。非虛的時候,不進行多型,只有基類的會被呼叫。純虛析構函式 定義的時候除了加 0 還需要給出函式的實現。因為當遞迴的呼叫析構函式時...
C 建構函式 析構函式 虛析構函式
一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...