C++的override和final

一、final

1、final用于让虚函数不可被重写

struct B2
{
    virtual void f() final {} // final 函数
};2

struct D2 : B2
{
    virtual void f() {}
};

如上代码是不可被编译过的

2、放在类后面,如果类被继承则编译报错

class A final : public B {


};

 

 

二、override

1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的);

2.强制编译器检查某个函数是否重写基类虚函数,如果没有则报错。

如:

 

强制检查这个类的父类里是否有这个handleEvent的虚函数,参数、返回值必须全部一致,如果没有则编译不过 。

在实际使用过程中,更多的是帮助程序员验证纯虚函数是否拼写正确,包括检查函数名、参数类型、参数个数、返回值等,如下场景:
A程序员定义了一个接口类,有一个接口函数

virtual void exec(int,string)=0;

B程序员需要实现这个接口,就在自己的子类中声明

void exec(int,int) override;

这句话是不能通过编译的,因为标记上了override,这告诉编译器此函数是重写父类的一个函数:void exec(int,int)

但是显而易见,父类中没有一个这样的函数,聪明的编译器直接报错。某些编辑器,如QtCreator在编写代码的时候就直接报错了。

posted @ 2019-09-27 00:36  朱小勇  阅读(359)  评论(0编辑  收藏  举报