我用虚函数 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它发生了吗?
关于c++ - 为什么我更改了子项中的父虚函数参数隐藏了父函数 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954960/