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修饰的函数必须为虚函数

  • 相关阅读:
    锐浪报表应用系列二
    论产品和项目
    我的处女作
    今天晚上吃什么?
    今日晚餐
    PYTHON+数据库
    周末看到小区有个阿姨溜羊驼
    AD 10使用技巧---新学习
    使用.NET进行高效率互联网敏捷开发的思考和探索【一、概述】
    【开发随感】【一】【开发基础的基础】
  • 原文地址:https://www.cnblogs.com/mrlsx/p/5594595.html
Copyright © 2011-2022 走看看