zoukankan      html  css  js  c++  java
  • C++的override和final

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

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

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

    2、override

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

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

    如:

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

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

    virtual void exec(int,string)=0;

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

    void exec(int,int) override;

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

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

  • 相关阅读:
    视频输入 范例
    视频输出 范例
    开启VI视频输入设备 范例
    初始化MMP系统 范例
    Git 的使用
    DVS/DVR/NVR/XVR
    shell命令中 && 和 || 的区别
    码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清
    DNS与DSN
    ob_start()失效与phpunit的非正常结束
  • 原文地址:https://www.cnblogs.com/judes/p/11595365.html
Copyright © 2011-2022 走看看