Вступить в клуб →
средняявопросООП, исключения и дизайн классов

Базовый класс вызывает виртуальную настройку, а срабатывает не та версия

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 в наследнике

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела