继承和方法重载

时间:2010-06-04 12:17:54

标签: c++ inheritance overloading override

为什么C ++编译器会出现此错误?为什么我可以从B访问lol(),但无法访问rofl()[不带参数]。渔获物在哪里?

class A
{
public:
   void lol(void) {}
   void rofl(void) { return rofl(0);}
   virtual void rofl(int x) {}
};

class B : public A
{
public:
   virtual void rofl(int x) {}
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
   a.lol();
   a.rofl(1);
   a.rofl();

   B  b;
   b.lol();
   b.rofl(1);    
   b.rofl(); //ERROR -> B::rofl function does not take 0 arguments


   return 0;
}

1 个答案:

答案 0 :(得分:30)

B::rofl(int)'隐藏'A::rofl()。为了A的{​​{1}}重载,您应该将rofl声明为B

using A::rofl;

这是C ++的明智之举:它警告您,您可能还需要覆盖class B : public A { public: using A::rofl; ... }; 中的A::rofl()方法。要么你这样做,要么明确声明你使用B的其他重载。