以下代码基于C++模板:完全指南的第298页上的示例。我删除了与我的问题无关的部分。继承基类成员函数的虚拟说明符
class Virtual {
public:
virtual void foo() {
}
};
class Base : private Virtual {
public:
void foo() {
std::cout << "Base::foo()" << '\n';
}
};
class Derived : public Base {
public:
void foo() {
std::cout << "Derived::foo()" << '\n';
}
};
int main()
{
Base *p = new Derived;
p->foo(); // calls Derived::foo()
}
我不明白通话p->foo()
如何结束调用Derived::foo
。更具体地说,p
的静态类型是Base*
。 Base::foo
是非虚拟的。现在,Base
私自继承'虚拟',它有自己的foo
,看起来好像Base::foo
以某种方式从Virtual::foo
获得virtual
说明符。这里究竟发生了什么?
'Base :: foo' **是虚拟的。 –
U创建了Derived的一个实例,这就是它调用Derived的方法的原因。检查OOP继承。 –
@KerrekSB这个问题是基于一个错误的假设。这发生在人们身上。清除误解帮助了我很多。这是否应该受到惩罚? – AlwaysLearning