Запрет переопределения метода в C++
Иногда базовая реализация должна остаться единственной в цепочке наследования.
Слово final после виртуального метода в базе
запрещает переопределение в любых потомках. Запишем
getVersion с virtual и final
в User:
class User {
public:
virtual int getVersion() final {
return 1;
}
};
class Employee : public User {
public:
// int getVersion() override; // ошибка: метод final
};
Создадим объект класса User и выведем номер версии:
int main() {
User user;
std::cout << user.getVersion() << "\n";
return 0;
}
Объявите в User виртуальный метод
build с final
и попробуйте переопределить его
в Employee - убедитесь,
что код не компилируется.