考虑以下示例:
struct Base
{
void foo()
{
cout << "Base foo\n";
}
void bar()
{
cout << "Base bar\n";
}
};
struct Derivate : public Base
{
void foo(int x)
{
cout << "Derivate foo\n";
}
};
如果我们创建两个实例,比如
Base a;
Derivate b;
Base
对象a
可以像往常一样调用其成员函数(a.foo(); a.bar();
)。
使用b
时,通话b.bar()
按预期工作,但由于我超载Base::foo()
,因此无法拨打b.foo()
。
为什么?
答案 0 :(得分:-1)
您没有超载Base::foo
,而是隐藏了它。它仍然可以访问,可以像这样调用:
static_cast<Base &>(b).foo();