Возможно, я ошибаюсь, но это, кажется, очень простой вопрос. Внезапно моя сеть наследования перестала работать. Написание небольшого базового тестового приложения показало, что это было неправильно, поэтому я не могу обвинить компилятор.Виртуальный вызов функции от конструктора
У меня есть базовый класс с поведением по умолчанию в виртуальной функции. Из этого вытекает дочерний класс и изменяет поведение.
#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
Когда экземпляр Ребенка создается, почему Base :: печать() называется? Я думал, что с помощью виртуального ключевого слова функция может быть заменена на производный класс.
В какой момент я смутился?
Возможный дубликат [виртуальная функция C++ от конструктора] (http://stackoverflow.com/questions/496440/c-virtual-function-from-constructor) – Mark