首页 > 代码库 > 虚析构函数的作用

虚析构函数的作用

 1 #include<iostream> 2 using namespace std; 3 class P 4 { 5 public: 6     P(){} 7     virtual ~P(){cout<<"调用了基类的析构函数!"<<endl;} 8     virtual void show() 9     {10         cout<<"调用了P类的输出函数"<<endl;11     }12 };13 14 class Q:public P15 {16 public:17     Q(){}18     ~Q(){cout<<"调用了派生类的析构函数!"<<endl;}19         void show()20     {21         cout<<"调用了Q类的输出函数"<<endl;22     }23 };24 void callshow(P *obj)25 {26     obj->show();27 }28 void main(void)29 {30     P *s=new Q;31     callshow(s);32     delete s;33     system("pause");34 }

去掉基类show()前面的virtual,运行结果:

加上基类show()前面的virtual,运行结果:

去掉基类析构函数前面的virtual,运行结果:

通过运行结果可以很明显的得出结论:

当没有定义为virtual时,用哪个类的指针(P *s)就调用哪个类的函数,当添加了virtual时,指向哪个类的
对象(new Q),就调用哪个类的函数。概念和用法简单,但是比较重要的技巧。

 

虚析构函数的作用