C 面向对象编程入门:构造函数与析构函数4

来源:百度文库 编辑:神马文学网 时间:2024/04/30 07:56:36
那么我们将如何编写类的析构函数呢?

  析构函数可以的特性是在程序结束的时候逐一调用,那么正好与构造函数的情况是相反,属于互逆特性,所以定义析构函数因使用"~"符号(逻辑非运算符),表示它为腻构造函数,加上类名称来定义。

  看如下代码:

 

#include <iostream
#include <string
using namespace std;   
class Teacher 

    public
    Teacher() 
    { 
        director = new char[10]; 
        strcpy(director,"王大力"); 
        //director = new string; 
        // *director="王大力";//string情况赋值 
    } 
    ~Teacher() 
    { 
        cout<<"释放堆区director内存空间1次"; 
        delete[] director; 
        cin.get(); 
    } 
    char *show(); 
    protected
    char *director; 
    //string *director; 
}; 
char *Teacher::show() 

    return director; 

class Student 

    public
    Student() 
    { 
        number = 1; 
        score = 100; 
    } 
    void show(); 
 
    protected
    int number; 
    int score; 
    Teacher teacher; 
 
}; 
 
void Student::show() 

    cout<
void main() 

    Student a; 
    a.show(); 
    Student b[5]; 
    for(int i=0; i<sizeof(b)/sizeof(Student); i++) 
    { 
        b[i].show(); 
    } 
    cin.get(); 
}

  上面的代码中我们为Teacher类添加了一个名为~Teacher()的析构函数用于清空堆内存。

  建议大家编译运行代码观察调用情况,程序将在结束前也就是对象生命周期结束的时候自动调用~Teacher()

  ~Teache()中的delete[] director;就是清除堆内存的代码,这与我们前面一开始提到的。

name=input_name;//这样赋值是错误的

  有直接的关系,因为delete操作符只能清空堆空间而不能清楚桟空间,如果强行清除栈空间内存的话将导致程序崩溃!