C++ 之 override

  • 作用
  • 不使用override
  • 使用override

作用

在成员函数声明或定义中, override 确保该函数为虚函数并覆写来自基类的虚函数。
位置:函数调用运算符之后,函数体或纯虚函数标识 “= 0” 之前。

不使用override

#include "pch.h"
#include <iostream>
using namespace std;class Base
{
public:virtual void demo1() { cout << "Base::demo1" << endl; }virtual void demo2() { cout << "Base::demo2" << endl; }
};class Derived :public Base
{
public:void demo1() { cout << "Derived demo1" << endl; }void dema2() { cout << "Derived demo2" << endl; }//将demo2错误写成了dema2,但是编译器不会给出提示
};int main()
{Derived d;d.demo1();d.demo2();return 0;
}

运行结果如下:

使用override


#include "pch.h"
#include <iostream>
using namespace std;class Base
{
public:virtual void demo1() { cout << "Base::demo1" << endl; }virtual void demo2() { cout << "Base::demo2" << endl; }void test(){cout << "Base::test" << endl;}
};class Derived :public Base
{
public:void demo1() override{ cout << "Derived demo1" << endl; }void demo1() const override { cout << "Derived demo1" << endl; }// error: Derived::foo does not override. signature mismatch. Base中的demo1 is not constvoid dema2() override{ cout << "Derived demo2" << endl; }//error:将dema2错误写成了demo2,且基类中无名称为dema2的虚函数,由于使用了override 编译器会检测出此错误  void test() override //error: Base:test is not virtual{cout << "Derived::demo2" << endl;}
};int main()
{Derived d;d.demo1();d.demo2();return 0;
}

总结:

在派生类的成员函数中使用override时,如果基类中无此函数,或基类中的函数并不是虚函数,编译器会给出相关错误信息。所以,建议在派生类中使用虚函数时,尽量使用override。

C++之override相关推荐

  1. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  2. C#中类的继承 override virtual new的作用以及代码分析

    继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法: override 子类中必须显示声明该方法是重写的父类中的方法: new 子类中忽略父类的已存在的 ...

  3. C++11中override的使用

    override是C++11中的一个继承控制关键字.override确保在派生类中声明的重载函数跟基类的虚函数有相同的声明. override明确地表示一个函数是对基类中一个虚函数的重载.更重要的是, ...

  4. Java 重写(Override)与重载(Overload)

    TestDog.java /*  * 重写(Override)  * 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写!  * 重写的好处在于子类 ...

  5. 坚持使用Override 注解(36)

    2019独角兽企业重金招聘Python工程师标准>>> 1.覆盖超类时千万小心,一不小心就变成重载了 2.现代的IDE 会在覆盖父类方法而没有使用@Override 时给出一个警告 ...

  6. 在有@Override方法上面会报错如下

    在有@Override方法上面会报错如下: The method oncreate(Bundle) of type HelloWorld must override or implement a su ...

  7. 重载和覆盖的区别?(overload vs override)

    override与overload的区别? override 表示重写,overload 表示重载. override是子类和父类之间的关系,是垂直关系:overload是同一个类中方法之间的关系,是 ...

  8. 新装myeclispse8.6GA、@Override出错

    过几天要考试,重新配下环境.下载好myeclispse8.6.tomcat6.0.myeclispse优化工具.myeclispse语言转换工具. 开始干活,因为myeclispse8.6集成JDK, ...

  9. java override overwrite,重写(overwrite)、重载(overload)和覆盖(override)

    覆盖(override):子类继承了父类的同名无参函数.当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖.废弃父方法 1.覆盖的方法的标志必须要和 ...

  10. java override 访问权限_java 重写(Override)的规则

    遵循的规则: [1]访问修饰符的限制一定要不小于被重写方法的访问修饰符 比如:Object类有个toString()方法,开始重写这个方法的时候我们总容易忘记Public修饰符,出错的原因就是:没有加 ...

最新文章

  1. 最小径集的算法_机器学习的利器——集成算法
  2. CentOS系列启动流程详解
  3. 【原创翻译】The Case for the Reduced Instruction Set Computer
  4. cat/tac/more/less 命令详解
  5. ST17H26只pwm波形特征
  6. RHEL部署ipa红帽身份验证
  7. 怎样一步步用D3画多曲线
  8. Javascript--File对象
  9. 鲍捷 | 知识图谱从 0 级到 10 级简化版
  10. antd table排序 vue_antd of Vue 之table组件踩坑记
  11. wps文字表格制作拼音田字格模板_WPS文字怎么制作田字格 WPS文字制作田字格的方法...
  12. 不定积分求解(三大方法)
  13. 蓝牙Socket通讯
  14. java导出excel弹出下载框_[Java教程]Springmvc和poi3.9导出excel并弹出下载框
  15. undo歌词中文音译_Undo - Sanna nielsen帮我看看这歌词翻译对么
  16. 用阿里云短信服务--通过Web接口发送短信
  17. 利用VBA代码合并多个Excel表格
  18. Unity 摄像头实时扫描二维码
  19. Mac外接显示器调色方法
  20. 达内云笔记(一)遇到的问题

热门文章

  1. python 基础 进程,线程,协程,并发并行,异步同步的定义
  2. nodejs,处理表单提交文件和普通参数(enctype=“multipart/form-data“),使用插件multiparty,将图片上传到服务器的文件夹中
  3. 1_15_python基础学习_0501
  4. 2023 食物卡路里查询API接口源码
  5. 一份完整齐全的技术方案文档
  6. 利用CSDN平台上传图片保存,生成链接访问。
  7. ider编辑器汉化补丁包安装
  8. 同济大学高等数学上册电子版_同济大学编高等数学上册第十一页例题几何解法...
  9. MySQL中IFNULL函数的使用方法
  10. 用python画小花_用python的小海龟 Turtle 画一朵好看又有趣的小花-Go语言中文社区...