Может быть, я ошибаюсь, но это, кажется, очень простой вопрос. Внезапно моя цепочка наследства перестала работать. Написание небольшого базового тестового приложения доказало, что я ошибался (поэтому я не могу винить компилятор).
У меня есть базовый класс с поведением по умолчанию в виртуальной функции. Дочерний класс происходит от этого и меняет поведение.
#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, функцию можно заменить для производного класса.
В какой момент я запутался?