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

Retina-рендерер рисует иконки в масштабе 1 вместо 2

struct Renderer {
    virtual void draw(const Icon& i, int scale = 1);
};

struct RetinaRenderer : Renderer {
    void draw(const Icon& i, int scale = 2) override;
};

std::unique_ptr<Renderer> r = std::make_unique<RetinaRenderer>();
r->draw(icon);

Отладчик показывает: вызвана RetinaRenderer::draw, но scale == 1. Почему?

  • Аргумент по умолчанию берётся из статического типа
  • override игнорирует аргументы по умолчанию наследника
  • make_unique создал объект типа Renderer
  • Аргументы по умолчанию запрещены в виртуальных методах

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

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

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

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