虚函数处理理解

将下面代码改编,让D:BB()变为B:BB()

#include<iostream>
using namespace std;
class B
{
public :
	int a;
	B(){a=1;cout<<"B()"<<endl;BB();}
	~B(){cout<<"~B()"<<endl;BB();}
	void BBB(){cout<<"BBB()"<<endl;BB();}
	virtual void BB(){cout<<"B::BB()"<<endl;}
};
class D:public B
{
public:
	virtual void BB(){cout<<"D::BB()"<<endl;}
};
int main()
{
	B *pb;
	D d;
	pb=&d;
	d.BBB();
	return 0;
}

改后:

#include<iostream>
using namespace std;
class B
{
public :
	int a;
	B(){a=1;cout<<"B()"<<endl;BB();}
	~B(){cout<<"~B()"<<endl;BB();}
	void BBB(){cout<<"BBB()"<<endl;BB();}
    void BB(){cout<<"B::BB()"<<endl;}
};
class D:public B
{
public:
	virtual void BB(){cout<<"D::BB()"<<endl;}
};
int main()
{
	B *pb;
	D d;
	pb=&d;
	d.BBB();
	return 0;
}
如果基类不是虚函数,派生类中的同名函数就不会覆盖。
阅读更多
换一批

没有更多推荐了,返回首页