c++ 虚函数的使用,以及父类转化为子类的构造顺序
#include <iostream>
using namespace std;
class A
{
public:
A(){print_();}
~A(){_print();}
virtual void print_()
{
cout<<"A"<<endl;
}
virtual void _print()
{
cout<<"~A"<<endl;
}
};
class B:public A
{
public:
B(){print_();}
~B(){_print();}
virtual void print_()
{
cout<<"B"<<endl;
}
virtual void _print()
{
cout<<"~B"<<endl;
}
};
int main()
{
A* b=new B();
delete b;
return 0;
}
上述的用例结果是:A B ~A
显然,new B(),但是B继承了A,所以先构造A,在构造B,
delete b,因为b是class A,指针指向的A内存空间,析构~A,这样造成了B没办法析构,
解决此类问题,参考c++ 的Object 类将父类的析构函数设置为virtual,这样子类的析构函数自动都变成virtual类型了

浙公网安备 33010602011771号