C++ 構造函數_析構函數
什麼是析構函數
如果說構造函數是對象來到世間的第一聲哭泣,那麼析構函數就是對象死亡前的最後遺言。
析構函數在對象銷毀時會被自動調用,完成的任務是歸還系統的資源。
特性:
1、如果沒有自定義的析構函數,則系統自動生成
2、析構函數在對象銷毀時自動調用
3、析構函數沒有傳回值、沒有參數也不能重載
定義格式
~類名()
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) 編輯 收藏 舉報