c++ - 编译器是如何实现继承的?

标签 c++ inheritance

<分区>

Possible Duplicate:
C++: rationale behind hiding rule

假设我有一个代码:

class  A
{       
    public:
    void f(int s) {}
};



class B:public A
{      
    public:
    void f() {}
};

int main()
{      B ob;
   ob.f(4);
} 

然后在这种情况下,编译器会生成一个错误“没有匹配函数来调用‘B::f(int)’” 但是 B 类继承了 A 作为 public,因此 B 必须具有函数“void f(int s)”。不知道为什么编译器会在这里生成错误?

最佳答案

那是因为B定义了一个不同的f隐藏继承自A的f 。如果您希望两者都在 B 中可用(这很可能),您必须使用 using-declaration:

将其纳入范围
class B : public A
{
  void f() {}
  using A::f;
};

此行为在 [class.member.loopkup] 中指定,尤其是第 4 段。

关于c++ - 编译器是如何实现继承的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13621160/

相关文章:

c# - WinForms - 有什么方法可以将 Visual C++ 项目的 UI 转换为 Visual C# 吗?

c++ - 二叉搜索树后继函数

c++ - 使用引用传递和值传递参数的麻烦执行程序

java - 安卓Java : Choose dynamically a subtype class

c++宏导入基模板类的所有名称

c++ - 多重或虚拟继承下的类的内存布局和vtable(s)?

C++ - 如何获取特定时区的日期

c++ - 当 malloc()-ing 相同的结构时,如何在结构中使用 C++ 字符串?

reactjs - React 中组合优于继承的好处

JavaScript多继承的高效解决方案