有人可以帮我理解为什么在这种情况下重载的条形函数不起作用吗?
class A {
public:
void foo(int a) {};
void bar(int a) {};
virtual void bar()=0;
};
class B : public A{
public:
virtual void bar() override {};
};
int main(int argc, char* argv[])
{
B b;
b.foo(2); // fine
b.bar(); // fine
b.bar(2); // not fine
}
答案 0 :(得分:3)
覆盖工作正常,但覆盖阴影基类功能。也就是说,已知类B中的名称查找只找到B中的一个,查找在那里停止。您可以使用基类资格认证,也可以使用B中的using
声明或(丑陋的)手动转发器。
示例:
class B
: public A
{
public:
using A::bar;
virtual void bar() override {};
};
答案 1 :(得分:0)
这实际上是在ISO C ++ FAQ中,带有代码示例
特技是添加
public:
using A::bar;