为什么无法访问基类的函数重载

Why are function overloads of base classes inaccessible

本文关键字:函数 重载 基类 访问 为什么      更新时间:2023-10-16

请考虑以下示例:

struct Base
{
    void foo()
    {
        cout << "Base foon";
    }
    void bar()
    {
        cout << "Base barn";
    }
};
struct Derivate : public Base
{
    void foo(int x)
    {
        cout << "Derivate foon";
    }
};

如果我们创建两个实例,例如

Base a;
Derivate b;

Base对象a可以像往常一样调用其成员函数(a.foo(); a.bar();(。

使用b时,调用b.bar()按预期工作,但由于我超载了Base::foo()因此无法调用b.foo()

为什么?

你没有重载Base::foo,而是隐藏了它。它仍然可以访问,可以这样调用:

static_cast<Base &>(b).foo();