Рассмотрим следующий код:
#include <iostream>
class B {
virtual void f() {
std::cout << "Base" << '\n';
}
};
class D final: public Base {
void f() final override {
std::cout << "Derived" << '\n';
}
};
Обращая внимание на два варианта использования контекстного ключевого слова final
выше — доступно, начиная с C ++11 – мы можем наблюдать следующее:
- Добавление
final
к функции-членуD
f()
предотвращает переопределениеf()
в классе, производном отD
. - Добавление
final
к классуD
препятствует его дальнейшему наследованию.
Поэтому невозможно, чтобы функция-член f()
была переопределена классом, производным от D
, поскольку такой производный класс не может существовать из-за final
, примененного к классу D
.
Есть ли смысл использовать final
в качестве элемента управления переопределением для функции-члена virtual
класса, объявленного как final
? Или это просто лишнее?
override
вместе сfinal
. - person max66   schedule 19.06.2019final
уже подразумевает, что функция-член должна бытьvirtual
? - person 眠りネロク   schedule 19.06.2019