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 ++的明智之举:它警告你可能还需要重写B
的A::rofl()
方法。 要么你这样做,要么你明确地声明你使用了A
的其他重载。