天天看點

C++ 構造函數_析構函數

C++ 構造函數_析構函數

什麼是析構函數

如果說構造函數是對象來到世間的第一聲哭泣,那麼析構函數就是對象死亡前的最後遺言。

析構函數在對象銷毀時會被自動調用,完成的任務是歸還系統的資源。

特性:

  1、如果沒有自定義的析構函數,則系統自動生成

  2、析構函數在對象銷毀時自動調用

  3、析構函數沒有傳回值、沒有參數也不能重載

C++ 構造函數_析構函數

定義格式

  ~類名()

class Student
{
public:
    Student() {cout<<"Student"<<endl;}
    ~Student() {cout<<"~Student"<<endl;} // 析構函數不允許加任何參數
private:
    string m_strName;
}      

定義析構函數的必要性

class Student
{
public:
    Student() {m_pName = new char[20];}
    ~Student() {m_pName = new char[20];}
private:
    char *m_pName;
}      

代碼示例

#include <iostream>
#include <stdlib.h>
#include <string>
#include "Teacher.h"
using namespace std;

/*************************************************************************
Teacher類
    自定義析構函數
    普通方式執行個體化對象,在銷毀對象時是否自動調用析構函數
    通過拷貝構造函數執行個體化對象,在銷毀對象時是否自動調用析構函數

資料成員:
    姓名
    年齡

成員函數:
    資料成員的封裝函數

*************************************************************************/
class Teacher
{
public:
    // 聲明構造函數,參數給定預設值
    Teacher(string name = "cjj",int age = 22);

    // 聲明拷貝構造函數
    Teacher(const Teacher &tea);

    // 聲明析構函數
    ~Teacher();

    // 聲明成員函數,把所有的成員函數都羅列出來
    void setName(string _name);
    string getName();
    void setAge(int _age);
    int getAge();

private:
    string m_strName;
    int m_iAge;    

};

// 定義構造函數,使用初始化清單,初始化構造函數的參數
Teacher::Teacher(string name,int age):m_strName(name),m_iAge(age)
{
    cout << "Teacher(string name,int age)" << endl;
}
// 定義拷貝構造函數
Teacher::Teacher(const Teacher &tea)
{
    cout<<"Teacher::Teacher(const Teacher &tea)"<<endl;
}
// 定義析構函數
Teacher::~Teacher(){cout<<"證明析構函數被調用"<<endl;}

// 類外定義,寫出成員函數的函數體
void Teacher::setName(string _name)
{
    m_strName = _name;
}
string Teacher::getName()
{
    return m_strName;
}
void Teacher::setAge(int _age)
{
    m_iAge = _age;
}
int Teacher::getAge()
{
    return m_iAge;
}


int main(void)
{
    Teacher t1;     // 從棧中執行個體化對象
    Teacher *p = new Teacher(); // 從堆中執行個體化對象
    delete p;
    Teacher t2(t1);

    system("pause");
    return 0;
}      

posted on 2018-07-02 00:27  吹靜靜  閱讀(233)  評論(0)  編輯  收藏  舉報

c++

繼續閱讀