Спецификатор final
Ключевое слово final можно использовать для назначения виртуальных функций, которые невозможно переопределить в производном классе. Можно также использовать это ключевое слово для назначения классов, которые невозможно наследовать.
function-declaration final;
class class-name final base-classes
Заметки
Ключевое слово final зависит от контекста и имеет специальное значение, только если используется после объявления функции или имени класса; в противном случае оно не является зарезервированным ключевым словом.
Если final используется в объявлениях класса, base-classes является необязательной частью объявления.
Пример
В следующем примере ключевое слово final используется для указания невозможности переопределения виртуальной функции.
class BaseClass
{
virtual void func() final;
};
class DerivedClass: public BaseClass
{
virtual void func(); // compiler error: attempting to
// override a final function
};
Дополнительные сведения о том, как указать, что функции-члены можно переопределить, см. в разделе Спецификатор override.
В следующем примере ключевое слово final используется для указания невозможности наследования класса.
class BaseClass final
{
};
class DerivedClass: public BaseClass // compiler error: BaseClass is
// marked as non-inheritable
{
};