我用虚函数f()制作了一个类,然后在派生类中将其重写为以下f(int),为什么我不能访问基类函数而抛出子实例?
class B{
public:
B(){cout<<"B const, ";}
virtual void vf2(){cout<<"b.Vf2, ";}
};
class C:public B{
public:
C(){cout<<"C const, ";}
void vf2(int){cout<<"c.Vf2, ";}
};
int main()
{
C c;
c.vf2();//error should be vf2(2)
}
最佳答案
您必须执行using B::vf2
,以便在名称查找期间考虑该功能。否则,只要编译器从子级->父级->父级父级等遍历继承树时找到匹配的函数名,遍历就会停止。
class C:public B{
public:
using B::vf2;
C(){cout<<"C const, ";}
void vf2(int){cout<<"c.Vf2, ";}
};
您遇到name hiding。这是an explanation of why它发生了吗?