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 подскажет развёрнутый ответ в реальном времени.