Базовый класс вызывает виртуальную настройку, а срабатывает не та версия
class Connection {
public:
Connection() { configure(); }
virtual void configure() { timeout_ = 30; }
protected:
int timeout_ = 0;
};
class FastConnection : public Connection {
public:
void configure() override { timeout_ = 2; }
};
FastConnection c; // timeout_ == 30
Почему не вызвалась FastConnection::configure?
- В конструкторе базы объект ещё имеет тип базы
- Виртуальные вызовы разрешаются на этапе компиляции
- Конструктор FastConnection перезаписал timeout_
- Нужен virtual перед configure в наследнике
