为什么 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
的 rofl
重载,您应该将 B
声明为 using A::rofl;
.
class B : public A {
public:
using A::rofl;
...
};
这是 C++ 的一个明智之举:它警告您可能还需要覆盖 B
中的 A::rofl()
方法。要么你这样做,要么你明确声明你使用 A
的其他重载。
关于c++ - 继承和方法重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973976/