当前位置: 首页 > article >正文

C++ 语言特性14 - override 和 final 关键字

一:override 关键字

        override 关键字用于确保派生类中的函数正确地重写了基类中的虚函数。

//使用override关键字可以确保你重写的函数与基类中的虚函数签名完全匹配
class Base {
public:
    virtual void foo() const {}
};

class Derived : public Base {
public:
    void foo() const override {} // 正确重写基类虚函数
};


//如果派生类的函数与基类的虚函数签名不匹配,编译器会报错,这有助于避免潜在的错误
class Derived : public Base {
public:
    void foo() override {} // 错误:缺少const限定符,签名不匹配
};

   

二:final 关键字

        final关键字用于防止继承和重写操作。它可以用于类和成员函数。

//用于成员函数
class Base {
public:
    virtual void foo() const final {
        // 实现
    }
};

class Derived : public Base {
public:
    // void foo() const override {} // 错误:不能重写基类中标记为final的函数
};


//用于类
class FinalClass final {
    // 成员定义
};

class DerivedFromFinal : public FinalClass {
    // 错误:FinalClass被声明为final,不能被继承
};

三:override(重写) 与overload(重载)的区别:

    1. overide 是C++中的关键字,而overload 不是。

    2. override 和 overload 在面向对象编程中扮演不同的角色:

         2.1: override是指在派生类中重新定义基类中的虚函数,以改变其行为。重写是面向对象编程中多态性的一部分,它涉及到继承

class Base {
public:
    virtual void display() const { std::cout << "Base display" << std::endl; }
};

class Derived : public Base {
public:
    void display() const override { std::cout << "Derived display" << std::endl; }
};

         2.2: overload 是指在同一个作用域内,允许存在多个同名的函数,但它们的参数类型、数量或顺序必须不同。overload 不涉及继承,它是基于函数签名的区分。 

class Example {
public:
    void print(int i) { /* ... */ }
    void print(double f) { /* ... */ }
    void print(int i, double f) { /* ... */ }
};

    

 

       

         


http://www.kler.cn/news/340085.html

相关文章:

  • Qt 加载字库,相同的Family Name导致设置字体无效问题
  • 多区域OSPF路由协议
  • 耳夹式耳机好用吗?有平价些的耳夹式耳机推荐吗?答案当然是肯定的
  • 无人机航测内业常用建模软件手册下载(上)
  • 面试--java基础
  • 人工智能的未来:从知识廉价时代到AI主导国家模式
  • SolarWinds中如何添加华为交换机实现网络管理
  • elasticsearch 8.2 版本批量化数据写入
  • “聪明车”上线“智慧路”!批量苏州金龙海格公交甘肃静宁投运
  • 从《被程序员耽搁的外卖员》看IT就业前景
  • 【有啥问啥】 群体智能(Swarm Intelligence):从自然到人工智能的深度探索
  • 利用 Pgpool-II 实现 IvorySQL 集群读写分离
  • 利用可解释性技术增强制造质量预测模型
  • 2.点位管理开发(续)及设计思路——帝可得后台管理系统
  • VCI_VBDSP使用教程-服务站
  • pymupdf 解析 PDF
  • python 实现karger算法
  • 力扣 1206. 设计跳表
  • 数据仓库的建设——从数据到知识的桥梁
  • 【深度学习】矩阵操作万能函数 einsum-爱因斯坦求和