inheritance和方法重载

为什么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; } 

B::rofl(int)隐藏了A::rofl() 。 为了让A的重载,你应该声明B using A::rofl;

 class B : public A { public: using A::rofl; ... }; 

这是C ++的明智之举:它警告你可能还需要重写BA::rofl()方法。 要么你这样做,要么你明确地声明你使用了A的其他重载。