在线文档教程
C++
语言 | Language

final specifier

最后说明符%28自C++11%29

指定虚函数不能在派生类中重写或不能在继承自...

句法

当应用于成员函数时,标识符final出现在报关员在类定义中的成员函数声明或成员函数定义的语法中。

应用于类时,标识符final出现在类定义的开头,紧接类名之后。

declarator virt-specifier-seq(optional) pure-specifier(optional)(1)
declarator virt-specifier-seq(optional) function-body(2)
class-key attr(optional) class-head-name class-virt-specifier(optional) base-clause(optional)(3)

1%29在成员函数声明中,final可能会在紧接声明符之后的virt-说明符-seq中出现,并且出现在纯说明符,如果使用的话。

2%29在类定义中的成员函数定义中,final可能会出现在virt-说明符-seq中,紧接声明器之后和函数体之前。

3%29的阶级定义,final如果使用,可以在类的名称后面,就在基子句开头的冒号之前,出现类-virt-说明符。

在%281,2%29的情况下,如果使用virt-说明符-seq,则为覆盖或final,或final overrideoverride final.在%283%29的情况下,类virt-说明符的唯一允许值(如果使用)是final...

解释

在虚拟函数声明或定义中使用时,final确保该函数是虚拟的,并指定它不能被派生类覆盖。程序格式不正确的%28a编译时错误生成%29,否则.

在类定义中使用时,final指定此类可能不会出现在另一个类定义%28的基类说明符列表中,换句话说,不能从%29派生。程序格式不正确的%28a编译时错误生成%29,否则.final也可以与联合定义,在这种情况下,除对std::is_final%29,因为联合不能从%29派生。

final在成员函数声明或类首中使用时具有特殊含义的标识符。在其他上下文中,它不是保留的,可以用来命名对象和函数。

二次

struct Base { virtual void foo( }; struct A : Base { void foo() final; // A::foo is overridden and it is the final override void bar() final; // Error: non-virtual function cannot be overridden or be final }; struct B final : A // struct B is final { void foo() override; // Error: foo cannot be overridden as it's final in A }; struct C : B // Error: B is final { };

二次

另见

  • 覆盖说明符%28自C++11%29

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/language/final