首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

final specifier

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

句法

当应用于成员函数时,标识符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在成员函数声明或类首中使用时具有特殊含义的标识符。在其他上下文中,它不是保留的,可以用来命名对象和函数。

二次

代码语言:javascript
复制
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
代码语言:txt
复制
 ? cppreference.com

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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com