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

为什么要有override

多态一定会成功吗

因为逻辑是用户编写的,那么肯定会有遗漏的地方,那就要规则来限制。就比如多态,都知道条件之一是子类重写了父类的虚函数,但是如果子类没有严格遵守这个规则,就无法达到目的。就比如这个代码:

class A {
public:virtual void aaa(int i) const{cout << "aaa" << endl;}};
class B :public A {virtual void aaa(int i) {cout << "bbb" << endl;}
};
void help(A& a){a.aaa(11);
}
int main(){B b;help(b);return 0;
}

刚开始看会以为这是个多态,但其实这并不是,会打印aaa而不是bbb。

为什么呢?因为aaa函数并没有被严格地重写:const属性丢失了。

这其实挺难发现的,因为编译器也并不会去给我们指出来,毕竟多态也并不是一定要实现。

所以这时候就体现override的作用,添加override后:

在这里插入图片描述

还有一种好处是:能让人知道这个函数是重写并且是用作多态的。

虽然子类直接覆盖父类的虚函数但是不加virtual也能达到多态:

// 输出bbb
class A {
public:virtual void aaa(int i){cout << "aaa" << endl;}};
class B :public A {void aaa(int i){cout << "bbb" << endl;}
};

但是这样会更直观:

// 输出bbb
class A {
public:virtual void aaa(int i){cout << "aaa" << endl;}
};
class B :public A {void aaa(int i) override{cout << "bbb" << endl;}
};
http://www.lryc.cn/news/168965.html

相关文章:

  • Linux界的老古董
  • 安卓逆向 - Xposed入门教程
  • 【嵌入式】2024届校招岗位汇总
  • Docker搭建ELK日志采集服务及Kibana可视化图表展示
  • SpringBoot结合MyBatis实现多数据源配置
  • 单个vue echarts页面
  • 【web开发】6、Django(1)
  • 第29节-PhotoShop基础课程-滤镜库
  • 空间(蓝桥杯)
  • 蓝桥杯2023年第十四届省赛真题-更小的数--题解
  • SpringBoot详解
  • typescript 类型断言
  • 如何确定自己是否适合做程序员?
  • LabVIEW以编程方式查找系统中DAQ设备的设备名称
  • 23、mysql数据库的安装
  • 【实战详解】如何快速搭建接口自动化测试框架?Python + Requests
  • Linux安全加固:保护你的服务器
  • 【C++初阶】C++STL详解(四)—— vector的模拟实现
  • VS code 下 makefile 【缺少分隔符 停下来】 报错解决方法
  • 虹科案例 | Zuellig Pharma和ELPRO通过符合GDP标准的温度监测和高效的温度数据管理为未来发展奠定基础
  • 为啥我的第二个for循环不加框红的代码就运行失效呢?(文末赠书)
  • Java高级之注解
  • 【SpringMVC】JSON数据传输与异常处理的使用
  • LeNet-5
  • Anaconda bug
  • xen-trap
  • 微服务架构介绍
  • 235. 二叉搜索树的最近公共祖先
  • DETR:End-to-End Object Detection with Transformers
  • 如何从第一性原则的原理分解数学问题