父类析构函数加virtual

转载 2016年08月29日 11:00:26
  1. #include<iostream>  
  2. using namespace std;  
  3. class Base  
  4. {  
  5. public:  
  6.     Base(){}  
  7.     virtual ~Base(){}  //基类的析构函数应该声明为虚析构函数。  
  8.     virtual void  Test(){cout<<"Base Test"<<endl;}  
  9. };  
  10. class Derived:public Base  
  11. {  
  12. public:  
  13.     Derived(){}  
  14.     ~Derived(){cout<<"delete Derived"<<endl;}  
  15.     void Test(){cout<<"Derived Test"<<endl;}  
  16. };  
  17. void main()  
  18. {   
  19.     Base* pBase=new Derived();  //父类的指针指向派生类的对象。  
  20.     pBase->Test();  
  21.     delete pBase; //<span style="color:#ff0000;">如果没有Base基类的析构函数没有声明为virtual,是不会执行到子类的析构函数的。</span>  
  22.                   //所以将父类的析构函数声明为虚函数,作用是用父类的指针删除一个派生类对象时,派生类对象的析构函数会被调用。  
  23. }  
将父类的析构函数声明为virtual是为了删除父类指针时可以调用到子类的析构函数。

相关文章推荐

为什么要把父类的析构函数设置为virtual

如果我们想通过基类的指针去释放子类的对象(这里必须是new出来的对象),就需要基类将基类的虚函数设置为virtual,看下面的例子: #include using namespace std; ...

子类继承和调用父类的构造、析构函数方法

先调用基类的构造函数,再调用派生类的构造函数就像盖楼的时候先从地基开始,然后第一层,第二层。。。如果是析构(析构函数需要是是虚函数),那么先调用派生类的析构函数,再调用基类的析构函数就像拆楼的时候想从...

C++父类,不能缺的虚析构函数

规则:如果一个类有可能被继承,那么请为它加上一个虚的析构函数,即使这个析构函数一行代码也没有。     0. 引子     为什么这样说?先看一个例子。先定义3个类:   ...

C++ 中 父类的虚 析构函数_legend

     C++  父类虚析构函数  (1)C++虚函数 :  1). C++ 多态 :  将子类对象指针赋值给父类指针,然后通过父类指针来调用  子类中重写的虚函数。  如果在重...

C++父类,不能缺的虚析构函数

规则:如果一个类有可能被继承,那么请为它加上一个虚的析构函数,即使这个析构函数一行代码也没有。  0. 引子     为什么这样说?先看一个例子。先定义3个类:   class...

为多态基类声明VIRTUAL析构函数

跟踪时间是很平常的任务,所以开发一个名为 TimeKeeper 的基类,并让不同的派生类来实现不同的计时方法是很合理的事情: class TimeKeeper { public :   ...

条款7:为多态基类声明virtual析构函数

可以通过一个简单的例子来说明问题,我们先定义了简单的基类和派生类: class Base { public: Base(){cout<<"base 构造"<<endl;} // virtual ~...

effective c++ 条款07(为多态基类声明virtual析构函数)整理

一、虚函数表原理 陈皓的一篇blog讲的很透彻:http://blog.csdn.net/haoel/article/details/1948051/ 虚函数表可以分为:单一继承无虚函数覆盖、单一继承...

条款07:为多态基类声明virtual析构函数

// 条款07: 为多态基类声明virtual析构函数 // 1.C++明确指出,当子类对象经由一个基类指针删除,而该基类带着一个non-virtual析构函数, // 其结果未有定义。实际执行时通...

Effective c++学习笔记——条款07:为多态基类声明virtual析构函数

Declare destructors virtual in polymorphic base classes        1、为什么要申明虚函数        C...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)