这里用C++覆盖和重载是怎么回事?

BCS*_*BCS 4 c++ overriding overloading

这不起作用:

class Foo
{
public:
    virtual int A(int);
    virtual int A(int,int);
};
class Bar : public Foo
{
public:
    virtual int A(int);
};

Bar b;
int main()
{
    b.A(0,0);
}
Run Code Online (Sandbox Code Playgroud)

看来,通过重写Foo::A(int)Bar::A(int)我莫名其妙地隐藏Foo::A(int,int).如果我添加一些Bar::A(int,int)东西工作.

有没有人能够很好地描述这里发生的事情?

CB *_*ley 5

本质上,名称查找在重载解析之前发生,因此A派生类中的函数会覆盖基类中的虚函数,但会隐藏任何基类中具有相同名称的所有其他函数.

可能的解决方案包括using Foo::A;在派生类中添加指令,以使派生类中的所有基类成员都A可见,或者对具有不同签名的函数使用不同的名称.

在这里也可以看到.