xcode - 为什么在重载的虚函数中给出'隐藏'的警告

时间:2013-03-08 13:42:05

标签: c++ warnings virtual hidden

我有一个基类,例如:

class A {
public:
  virtual void methodA(int) {}
  virtual void methodA(int, int, int) {}
};

xcode给出了methodA被隐藏的警告 - 所有sems都按照我的预期工作(从A派生的类可以通过A指针访问并使用方法A的任何一个)。

1 个答案:

答案 0 :(得分:6)

我猜其中一个派生自A的类(让我们说它的B)只会覆盖methodA()的一个重载。在这种情况下,methodA中的B的其他重载是{em>隐藏。class A { public: virtual void methodA(int) {} virtual void methodA(int, int, int) {} }; class B : public A { public: virtual void methodA(int) {} }; int main() { A a; B b; A *pa = &b; a.methodA(7); //OK a.methodA(7, 7, 7); //OK pa->methodA(7); //OK, calls B's implementation pa->methodA(7, 7, 7); //OK, calls A's implementation b.methodA(7); //OK b.methodA(7, 7, 7); //compile error - B's methodA only accepts one int, not three. } 。例如:

using

解决方案是在B中添加class B : public A { public: using A::methodA; //bring all overloads of methodA into B's scope virtual void methodA(int) {} }; 声明:

{{1}}