Easyoverride

Чем override обязывает и какие ошибки ловит?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

override (C++11) помечает, что функция переопределяет virtual из базы. Если в базе нет virtual с точно такой же сигнатурой (включая const, ref-qualifiers, noexcept) — это compile-ошибка.

class Base {
public:
    virtual void f(int) const {}
    virtual void g() {}
    virtual ~Base() = default;
};
class Derived : public Base {
public:
    void f(int) const override {}   // OK
    // void f(int) override {}      // ОШИБКА: забыт const
    // void h() override {}         // ОШИБКА: в базе нет h()
};

Ловит классические ошибки:

  • опечатка в имени метода (lenght вместо length);
  • другая сигнатура (int вместо double, забыт const);
  • метод в базе не virtual (хотели override, получили hiding);
  • изменение сигнатуры базы без обновления производных.

Правило: ВСЕГДА ставьте override при переопределении virtual. Это бесплатно (не влияет на performance/ABI) и самодокументируемо.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.