/**************************************************************************************************************************
模块说明
虚析构函数
【情况1】情况一:将基类Point中的析构函数声明为不带virtual的非析构函数 即:Point(){};
则运行结果为:executing Point destructor
【情况2】情况二:将基类Point中的析构函数声明为虚析构函数,即:virtual ~Point(){}
则运行结果为:executing Circle destructor
executing Point destructor
***************************************************************************************************************************/
#include<iostream>
using namespace std;
class Point{
public:
Point(){};
~Point() //情况一:将基类中的析构函数声明为非虚析构函数
{
cout<<"executing Point destructor"<<endl;
}
};
class Circle:public Point{
public:
Circle(){};
~Circle()
{
cout<<"executing Circle destructor"<<endl;
}
};
int main()
{
Point *p=new Circle;
delete p;
system("pause");
return 0;
}
/**************************************************************************************************************************
模块说明
虚析构函数
【情况1】情况一:将基类Point中的析构函数声明为不带virtual的非析构函数 即:Point(){};
则运行结果为:executing Point destructor
【情况2】情况二:将基类Point中的析构函数声明为虚析构函数,即:virtual ~Point(){}
则运行结果为:executing Circle destructor
executing Point destructor
***************************************************************************************************************************/
#include<iostream>
using namespace std;
class Point{
public:
Point(){};
virtual ~Point() //情况二:将基类中的析构函数声明为虚析构函数
{
cout<<"executing Point destructor"<<endl;
}
};
class Circle:public Point{
public:
Circle(){};
~Circle()
{
cout<<"executing Circle destructor"<<endl;
}
};
int main()
{
Point *p=new Circle;
delete p;
system("pause");
return 0;
}