今天我觉得自己像个菜鸟:
class Base
{
public:
virtual void foo(int)=0;
virtual void foo(int, int) {}
virtual void bar() {}
};
class Derived : public Base
{
public:
virtual void foo(int) {}
};
void main()
{
Derived d;
d.bar(); // works
d.foo(1); // works
d.foo(1,2); // compiler error: no matching function call
}
我希望 d
从 Base
继承 foo(int, int)
,但它没有。那么我在这里缺少什么?
最佳答案
那是因为同名的基函数被隐藏了。
你需要对你没有覆盖的函数使用using
:
class Derived : public Base
{
public:
using Base::foo;
virtual void foo(int) {} //this hides all base methods called foo
};
关于c++ - 如果仅部分重载重载函数,多态性将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12113074/