将下面代码改编,让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;
}
如果基类不是虚函数,派生类中的同名函数就不会覆盖。