我用虚函数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它发生了吗?

10-06 04:11