第12周-程序阅读-多态性与抽象类-虚析构函数

来源:互联网 发布:mac用搜狗输入法 编辑:程序博客网 时间:2024/05/21 11:04

问题及代码:

#include <iostream>  using namespace std;  class BASE  {  private:      char c;  public:      BASE(char n):c(n) {}      virtual ~BASE() { cout<<c; }  };  class DERIVED:public BASE  {  private:      char c;  public:      DERIVED(char n):BASE(n+1),c(n) {}      ~DERIVED(){ cout<<c; }  };  int main(){      DERIVED d('X');      return 0;  }    


 

运行结果:

 

知识点总结:

虚析构函数。

 

学习心得:

1. 一般来说,如果一个类要被另外一个类继承,而且用其指针指向其子类对象时,如题目中的A* d = new B();(假定A是基类,B是从A继承而来的派生类),那么其(A类)析构函数必须是虚的,否则在delete d时,B类的析构函数将不会被调用,因而会产生内存泄漏和异常;

2. 在构造一个类的对象时,先构造其基类子对象,即调用其基类的构造函数,然后调用本类的构造函数;销毁对象时,先调用本类的析构函数,然后再调用其基类的构造函数;

0 0
原创粉丝点击