С++ 11 добавлен окончательный.
Наконец-то!
Я понимаю, что final
выполняет две вещи:
- Делает класс ненаследуемым.
- Делает (виртуальные) функции в классе, не переопределяемом (в производном классе).
Оба они кажутся независимыми друг от друга. Но возьмите, например, следующее:
class Foo
{
public:
virtual void bar()
{
//do something unimportant.
}
};
class Baz final : public Foo
{
public:
void bar() /*final*/ override
{
//do something more important than Foo bar.
}
};
Сверху я считаю Baz
final
, я должен НЕ указать, что его функция virtual
bar
также final
. Поскольку Baz
нельзя унаследовать, вопрос об переопределении bar
выходит за рамки. Однако мой компилятор VС++ 2015, очень тихий об этом. Я не тестировал это на других в данный момент.
Я был бы рад, если бы кто-то мог пролить свет на эту тему. Цитата из стандарта (если таковая имеется) была бы чрезвычайно оценена. Также, пожалуйста, укажите любые угловые случаи, о которых я не знаю, что может привести к неудаче моего логического убеждения.
Итак, мой вопрос: Имеет ли final class
неявно подразумеваемые функции virtual
final
также? Должно ли это? Просьба уточнить.
Причина, по которой я спрашиваю об этом, состоит в том, что функции final
становятся квалифицированными для де виртуализации, что является большой оптимизацией. Любая помощь приветствуется.