解構函式(destructor) 與建構函式相反,當物件脫離其作用域時(例如物件所在的函式已呼叫完畢),系統自動執行解構函式。解構函式往往用來做“清理善後” 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在解構函式中用delete釋放)。
解構函式名也應與類名相同,只是在函式名前面加一個位取反符~,例如~stud( ),以區別於建構函式。它不能帶任何引數,也沒有返回值(包括void型別)。只能有一個解構函式,不能過載。如果使用者沒有編寫解構函式,編譯系統會自動生成一個預設的解構函式(即使自定義了解構函式,編譯器也總是會為我們合成一個解構函式,並且如果自定義了解構函式,編譯器在執行時會先呼叫自定義的解構函式再呼叫合成的解構函式),它也不進行任何操作。所以許多簡單的類中沒有用顯式的解構函式。
包含建構函式和解構函式的C++程式。
#include
using namespace std;
class stud //宣告一個類
{
private: // 私有部分
int num;
char name[10];
char sex ;
public: //公用部分
stud(int n,char nam[],char s ) //建構函式
num = n;
strcpy (name, nam);
sex = s;
}
~stud( ) //解構函式
cout
void display( ) //成員函式,輸出物件的資料
};
int main( )
stud stud1(10010, "Wang-li", "f"), stud2(10011, "Zhang-fun", "m"); //建立兩個物件
stud1.display( ); //輸出學生1的資料
stud2.display( ); //輸出學生2的資料
}//主函式結束的同時,物件stud1,stud2均應被“清理”,而清理就是透過呼叫了解構函式實現的。
輸出結果:
num: 10010
name: Wang-li
sex: f
num: 10011
name: Zhang-fun
sex: m
stud has been destructe!
解構函式(destructor) 與建構函式相反,當物件脫離其作用域時(例如物件所在的函式已呼叫完畢),系統自動執行解構函式。解構函式往往用來做“清理善後” 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在解構函式中用delete釋放)。
解構函式名也應與類名相同,只是在函式名前面加一個位取反符~,例如~stud( ),以區別於建構函式。它不能帶任何引數,也沒有返回值(包括void型別)。只能有一個解構函式,不能過載。如果使用者沒有編寫解構函式,編譯系統會自動生成一個預設的解構函式(即使自定義了解構函式,編譯器也總是會為我們合成一個解構函式,並且如果自定義了解構函式,編譯器在執行時會先呼叫自定義的解構函式再呼叫合成的解構函式),它也不進行任何操作。所以許多簡單的類中沒有用顯式的解構函式。
包含建構函式和解構函式的C++程式。
#include
#include
using namespace std;
class stud //宣告一個類
{
private: // 私有部分
int num;
char name[10];
char sex ;
public: //公用部分
stud(int n,char nam[],char s ) //建構函式
{
num = n;
strcpy (name, nam);
sex = s;
}
~stud( ) //解構函式
{
cout
}
void display( ) //成員函式,輸出物件的資料
{
cout
cout
cout
}
};
int main( )
{
stud stud1(10010, "Wang-li", "f"), stud2(10011, "Zhang-fun", "m"); //建立兩個物件
stud1.display( ); //輸出學生1的資料
stud2.display( ); //輸出學生2的資料
}//主函式結束的同時,物件stud1,stud2均應被“清理”,而清理就是透過呼叫了解構函式實現的。
輸出結果:
num: 10010
name: Wang-li
sex: f
num: 10011
name: Zhang-fun
sex: m
stud has been destructe!
stud has been destructe!