C 析構函式

2022-03-18 00:28:08 字數 1645 閱讀 5062

析構函式的特點:

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(){}

類似於系統自動生成的預設建構函式,這個自動生成的預設析構函式的函式體也是空的,但是

它能完成釋放物件所佔的記憶體空間的任務。

對於大多數類而言,這個預設析構函式就能滿足要求。但是,如果在乙個物件撤銷之前

需求完成另外一些處理工作的話,則應該顯示地定義析構函式,例如:

class

string_data

~string_data(); //

析構函式

void get_info(char *);

void sent_info(char *);

private

:

char *str;

};

這是建構函式和析構函式常見的用法,即在建構函式中用new運算子為字串分配儲存空間

,最後在析構函式中通過delete運算子釋放已分配的儲存空間。

(2)除了在主函式結束(或呼叫exit函式)時,物件被撤銷,系統會自動呼叫析構函式函式

外,在以下的情況下,析構函式也會被呼叫:

a、如果乙個物件被定義在函式體內,則當這個函式被呼叫結束時,該物件將釋放,析構

函式被自動呼叫。

b、若乙個物件是使用new運算子動態建立的,在使用delete運算子釋放它時,delete會

自動呼叫析構函式。

#includeusing

namespace

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撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...