具有相同名称但不同的参数的C ++方法

时间:2016-03-21 07:33:15

标签: c++

为什么在C ++中这样做是为了让编译器忘记"关于其他具有相同名称但不同参数的方法,如果覆盖其中一种方法?

struct A {
  void virtual f() {}
  void virtual f(int) {}
  void testA() {f(); f(1);} // OK
 };

struct B :  public A {
  void f() override {}
  void testB() {f(); f(1);} // Error
};

这似乎是毫无意义的行为......不是吗?

2 个答案:

答案 0 :(得分:2)

但你可以添加一个using语句来使所有A :: f方法可见,类似于:

  struct B :  public A {
    using A::f;
    void f() override {}
    void testB() {f(); f(1);} // No Error
  };

答案 1 :(得分:1)

当您覆盖子类中的成员函数时,您隐藏父类的名称,它只是语言的工作方式。如果你想使用父类中的函数,你必须明确,例如A::f(1)