C++——override
override关键字作用:
如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译。
举例子说明
struct Base
{
virtual void Turing() = 0;
virtual void Dijkstra() = 0;
virtual void VNeumann(int g) = 0;
virtual void DKnuth() const;
void Print();
};
struct DerivedMid: public Base
{
// void VNeumann(double g);
//接口被隔离了,曾想多一个版本的VNeumann函数
};
struct DerivedTop : public DerivedMid
{
void Turing() override;
void Dikjstra() override; //无法通过编译,拼写错误,并非重载
void VNeumann(double g) override; //无法通过编译,参数不一致,并非重载
void DKnuth() override; //无法通过编译,常量性不一致,并非重载
void Print() override; //无法通过编译,非虚函数重载
};
(之前听过,但是没看过结构体重载 ==)
如果没有使用override关键字,上面的写法编译可以通过但是运行的效果与真实意愿(希望重载)不符
举例子说明
class testoverride
{
public:
testoverride(void);
~testoverride(void);
virtual void show() const = 0;
virtual int infor() = 0;
virtual void test() = 0;
virtual int spell() = 0;
};
class B: public testoverride
{
public:
virtual void show(); //1
virtual void infor(); //2
virtual void vmendd(); //3
virtual void test(int x);//4
virtual void splle(); //5
};
上面的1-5个重载函数编译过程中,除了返回值不同的infor会报错以外,其他函数都不会有问题,但是在类实例化的时候会提示是抽象类,因为他们都没有真正实现重载
class C: public testoverride
{
public:
virtual void show() override;
virtual void infor() override;
virtual void vmendd() override;
virtual void test(int x) override;
virtual void splle() override;
};
添加了override以后,会在编译器override修饰符则可以保证编译器辅助地做一些检查,上面的情况无法通过编译
结论
如果派生类里面是像重载虚函数 就加上关键字override 这样编译器可以辅助检查是不是正确重载,如果没加这个关键字 也没什么严重的error 只是少了编译器检查的安全性
---------------------
作者:xiaoheibaqi
来源:CSDN
原文:https://blog.csdn.net/xiaoheibaqi/article/details/51272009
版权声明:本文为博主原创文章,转载请附上博文链接!
C++——override的更多相关文章
- Java高并发系列——检视阅读
Java高并发系列--检视阅读 参考 java高并发系列 liaoxuefeng Java教程 CompletableFuture AQS原理没讲,需要找资料补充. JUC中常见的集合原来没讲,比如C ...
- Scala override
var 变量不能在子类中重写,除非父类是抽象类 在抽象类中var变量不能赋初值 abstract class Person{ val name="" def name1=" ...
- [转]How to override HandleUnauthorizedRequest in ASP.NET Core
本文转自:http://quabr.com/40446028/how-to-override-handleunauthorizedrequest-in-asp-net-core I'm migrati ...
- overload、overwrite、override
1.重载 overload 函数名一样,参数不同(类型.顺序,与返回值类型无关),重载的函数一般在同一个类中 class A { public: void test() {} void test(in ...
- 转: Delphi的OverRide、OverLoad和Virtual方法
http://blog.csdn.net/ckli/article/details/2201418 override 重写 也叫覆盖 .方法的重写Overriding和重载Overloading是Ja ...
- Java中@Override的作用
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1.可以当注释用,方便阅读:2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例如 ...
- 扩:new and override
昨天有个网友问我继承里面的new和override关键词有啥区别,呃,我们来看个例子就知道了 new ==>隐藏父类同名方法 override==>覆盖 定义一个父类: public c ...
- sealed、new、virtual、abstract与override 趣解
1. sealed——“断子绝孙” 密封类不能被继承.密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于 方法或属性时,sealed修饰符必须始终与override一起使用. ...
- C#基础知识四之override和new的区别
override override是派生类用来重写基类方法的.调用的派生类方法,如需调用基类方法用base关键字 override不能重写非虚方法或静态方法. override重写必须用abstrac ...
- Overload 和Override 的区别
Overload 是重载的意思,Override 是覆盖的意思,也就是重写.重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同).重写 ...
随机推荐
- 分布式_事务_02_2PC框架raincat源码解析
一.前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat的源码 二.协调者启动过程 主要就是在启动类中通过如下代码来启动 netty nettyService.sta ...
- 分布式_理论_05_ 一致性算法 Paxos
一.前言 二.参考资料 1.分布式理论(五)—— 一致性算法 Paxos 2.分布式理论(五) - 一致性算法Paxos
- Servlet细节处理
1.Servlet的线程安全问题 尽管servlet的工作效率高,但是线程也是不安全的,因为一个类型的Servlet只有一个实例对象,那么就有可能会出现一个Servlet同时处理多个请求 解决方案:所 ...
- 《精通.NET企业项目开发》 - 书摘精要
(P7) 处于任何逻辑层面上的类,对于同一层面上的其他类应该是可重用的:对于在同等范围内其他所有需要该数据的类而言,提供数据的类应该是可以被调用的: (P9) 大多数企业系统都是用平台无关的技术构建的 ...
- hdu-2544-最短路(SPFA模板)
题目链接 题意很清晰,入门级题目,适合各种模板,可用dijkstra, floyd, Bellman-ford, spfa Dijkstra链接 Floyd链接 Bellman-Ford链接 SPFA ...
- 一段tcl代码
#!/usr/bin/wish proc icanspeak {} { set name [.ent get] } { exec s $name } } label .lab -text " ...
- 16_游戏编程模式ServiceLocator 服务定位
####简单说,就是某个系统作为一个服务,对全局系统可见. Service Locator (服务定位) ``` //简单粗暴的代码, 使用声音系统 // Use a static class? Au ...
- linux命令学习笔记(30): chown命令
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID: 文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷 ...
- 详解linux互斥锁 pthread_mutex和条件变量pthread_cond
[cpp] view plaincopy ============================================================= int pthread_creat ...
- Memcache mutex设计模式
Memcache mutex设计模式 转自:https://timyang.net/programming/memcache-mutex/ 场景 Mutex主要用于有大量并发访问并存在cache过期的 ...