回覆列表
  • 1 # 使用者219515082544

    解構函式(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!

  • 中秋節和大豐收的關聯?
  • 1.三唑酮可與哪些農藥互陪? 2.三唑酮是銅製劑嗎?