c++ - 为什么我更改了子项中的父虚函数参数隐藏了父函数 C++?

标签 c++ class virtual

我用虚函数 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/

相关文章:

c++ - 使用 googlemock 时,我可以不模拟 C++ 接口(interface)中的所有方法吗?

c++ - 缓存还是不缓存(生成),这是个问题

java - android 上的一个 Activity 是否可以有多个 java 类?

c++ - 使用模板类在 C++ 中重载运算符

windows - 大内存块分配和 4K block

c++ - 调用 MoveWindow 后 CComboBox 自动选择文本

c++ - 用 C 写一个客户端-服务器程序 ... 在一张纸上

javascript - 在 JavaScript 中调用时创建新的 'class' 实例

c++ - 继承、模板和虚函数(这可能会变得困惑)

c++ - 需要覆盖逆变变通方法