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(); //1virtual void infor(); //2virtual 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 只是少了编译器检查的安全性
c++ :override的用法相关推荐
- C#中的static,interface,virtual,abstract,override的用法
C# 是面向对象的程序设计语言,每一个函数都属于一个类. Static:当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现. 也就是说,这个方法属于类,但是不 ...
- java之面向对象:继承extends、super、覆盖override的用法
继承的好处: 1 )提高了代码的复用性. 2 )让类与类之间产生了关系,给第三个特征多态提供 了前提. java支持单继承,不直接支持多继承,但对C++中的多继承机制进行改良. 单继承:一个子类只能有 ...
- C++ override 关键字用法
override关键字作用: 如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译. 举例子说明 struct Base {virtual ...
- override的用法
override用于重载父类成员函数 override关键字用于父类有虚成员函数,子类成员函数进行父类成员函数重载时,当父类没有该虚成员函数时,会进行报错. 例如: 父类:(virtual 钱包) 子 ...
- JAVA中 @Override 的作用
如果想重写父类的方法,比如toString()方法的话,在方法前面加上@Override 系统可以帮你检查方法的正确性, @Override public String toString(){... ...
- java override报红_Eclipse @override报错解决
第一种解决方案: @Override是JDK5 就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override 而JDK6 修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现 ...
- eclipse @override 报错 解决
第一种解决方案: @Override是JDK5就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override 而JDK6修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可 ...
- Eclipse @override报错
我想这个问题肯定困扰了很多人,我也不例外.新公司用的东西多多少少会与我们以前公司的有所不同.所以这个问题也时常伴随在我们身边. 第一种解决方案: @Override是JDK5 就已经有了,但有个小小的 ...
- C++ override解释
C++ override从字面意思上,是覆盖的意思,实际上在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用.在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行 ...
最新文章
- 常用电脑密码破解技巧
- python多线程下载m3u8文件,python 实现多线程下载m3u8格式视频并使用fmmpeg合并
- 变压器轻载是什么意思?
- Shell程序设计 | 基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数
- Django环境搭建
- CryEngine3 引擎非商业用途将免费
- Python—开始编程
- 直播丨 SQL大赛冠军怀晓明:深入解析Oracle存储过程中的性能瓶颈
- linux malloc core,Linux上使用的malloc版本
- Ajax 加载数据 练习 自我有些迷糊了,写的大概请谅解 ^ _ ^
- COMMAND NOT SUPPORTED 解决方法
- dxdiag 的使用
- 搭建DEM企业管理器
- Java SE 易错题
- linux7 inittab没有,CentOs7 7个运行级别介绍,(CentOs7 inittab在使用systemd时不再使用)...
- 协助医学未来的10项有前途的技术
- bean覆盖 springboot_如何在@SpringBootTest中使用Mock覆盖bean?
- 电脑变卡,电脑用久了会变卡怎么办?让电脑变得流畅方法图解
- 信息安全CISP认证-大家关心哪些问题?
- JAVA版本微信管家平台—JeeWx 捷微 4.1 微服务版本发布,微信砍价活动闪亮登场!...
热门文章
- 三代身份证设计曝光,集社保、指纹等功能于一体...
- mysql 解决了幻影读_MySQL到底能否解决幻读问题
- leetcode刷题java、c++、go语言三合一版本 谷歌师兄的刷题笔记、东哥的算法小抄、 Guide哥的Java面试突击版
- sniffer简单使用
- android新闻项目、饮食助手、下拉刷新、自定义View进度条、ReactNative阅读器等源码...
- App邀请机制如何实现?如何快速邀请拉新?
- 面试真题:1亿张彩票堆起来有多高?!
- AR系列路由器产品介绍
- 计算机硬件简介ppt,_计算机硬件简介.ppt
- bzoj1583 [Usaco2009 Mar]Moon Mooing 哞哞叫