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类型了

posted @ 2014-09-13 11:49  xswby  阅读(177)  评论(0)    收藏  举报