也许我错了,但这似乎是一个非常基本的问题。突然我的继承链停止工作。编写一个小的基本测试应用程序证明是我错了(所以我不能责怪编译器)。
我有一个基类,在虚函数中具有默认行为。子类从中派生并更改行为。
#include <iostream>
class Base
{
public:
Base() { print(); }
~Base() {}
protected:
virtual void print() { std::cout << "base\n"; }
};
class Child : public Base
{
public:
Child() {}
~Child() {}
protected:
virtual void print() { std::cout << "child\n"; }
};
int main()
{
Base b;
Child c;
}
这打印:
base
base
创建 Child 实例时,为什么要调用 Base::print()?我认为通过使用 virtual 关键字,可以将函数替换为派生类。
我在什么时候让自己感到困惑?