Зачем добавлять final к функции-члену final класса? - PullRequest
1 голос
/ 19 июня 2019

Рассмотрим следующий код:

#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? Или это просто избыточно?

1 Ответ

2 голосов
/ 19 июня 2019

final для функции virtual в производном классе final является избыточным.

Точно так же, как выражение virtual для метода, помеченного override, является избыточным. C ++ иногда так и есть.

...