EasyООП
Чем override отличается от final?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
override помечает, что функция переопределяет virtual из базы — если в базе нет такой virtual (опечатка в имени/сигнатуре), это compile-ошибка. final запрещает дальнейшее переопределение (метод) или наследование (класс).
class Base {
public:
virtual void f();
virtual void g();
};
class Derived : public Base {
void f() override; // проверяет, что реально переопределяет
void g() final; // дальше переопределять нельзя
};
class Final final : public Derived {}; // класс — наследовать нельзяoverride— всегда при переопределении (правило хорошего тона, ловит ошибки);final— для hot virtual-функций (компилятор может devirtualize) или фиксации контракта;- Без
overrideтихо создавалась бы новая virtual (hiding) — трудно отловить.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.