zoukankan      html  css  js  c++  java
  • final ,override关键字

    • final

    有时我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类。为了实现这一目的,c++ 11新标准提供了一种防止继承发生的方法,即在类名后跟一个关键字final:

    class base final {/* */}    //base不能作为基类
    class Derived:base { /* */}    //错误,base不能作为基类

     此外,final还可以修饰类中的虚函数,表示类成员函数不可以在派生类中进行覆盖

    class base
    {
    virtual void fun() final {...};
    }
    class derived:base
    {
    void fun(){...};              //error,
    }

    override

    对于基类中的虚函数,派生类可以选择覆盖或者不覆盖。选择覆盖时,则派生类中该函数的形参和返回值类型必须与基类严格匹配。若选择不覆盖,则可以存在与基类中虚函数同名的函数,但通常为了避免歧义,不会选择使用同名函数。为了加以区分,对于选择覆盖的函数用override加以修饰,表示该函数覆盖了基类的虚函数,若没有覆盖,则报错。

    class base
    {
    public:
    virtual void f1();
    virtual void f2();
    void f3();
    }
    
    class derived:public base
    {
    public:
    void f1()override;           //ok
    void f2(int) override;     //error,基类中不存在f2(int)虚函数
    void f3() override;           //error,f3不是虚函数
    }

    注:final,override修饰的函数必须为虚函数

  • 相关阅读:
    牢骚与javascript中的this
    Vim 命令整理
    跟我一起写 Makefile
    Scikit-Learn模块学习笔记——数据预处理模块preprocessing
    Scikit-Learn模块学习笔记——数据集模块datasets
    Markdown 完全指南
    Shell命令行操作
    init_ir_技术实现篇
    ch2 创建和销毁对象
    ch6 影响 MySQLServer 性能的相关因素
  • 原文地址:https://www.cnblogs.com/mrlsx/p/5594595.html
Copyright © 2011-2022 走看看