C++11: final override
admin
2024-04-04 16:45:54
0

引言

final和override都是C++11新引入的关键字,由于两关键字都于继承控制相关,所以我们称final和override为继承控制关键字,需要说明的是final 可作用于类,亦可作用于成员函数,override则只能作用于虚函数。

我们简单介绍final和override两关键字,那么C++11引入final和override两关键字的引入是为了解决什么问题呢?

缘由

C++11之前,由于C++没有一个强制机制限制基类和派生类的继承和重写关系,我们经常会遇到这两类问题。一叫无意重写,另一类叫“假”继承。

无意重写

class Window
{
public:virtual void Draw();
};class View : public Window 
{
public:void Draw();
};

此例中 ,派生类View本意是声明一个归属自己的成员函数,但是不小心重写了父类的Draw。最终导致行为非预期。

“假”继承

class Window
{
public:virtual void Draw() const;
};class View : public Window 
{
public:virtual void Draw();
};

作者本意是让View中的成员函数Draw重写基类Window成员函数Draw,但是由于Draw函数签名的不一致,最终导致重写失败。也是我们所说的“假”继承,“假”继承也是非作者所望。

函数签名,一般包括 :

  • 函数名称,
  • 参数列表,
  • 以及修饰符(如:const)

为了解决无意重写和“假”继承问题,C++11才引入关键字override和final关键字。override负责解决“假”继承问题,final负责解决无意继承问题。

final & override

final的引入是为了禁止类的进一步派生以及虚函数的进一步重写。override则是为了保证派生类中重载的虚函数与父类具有相同的函数签名。

override

class Window
{
public:virtual void Draw() const;
};class View : public Window 
{
public:virtual void Draw() override;
};

在派生类需要重写的函数声明后面添加override。派生类声明的重写函数与基类具有不同的函数签名,编译器在编译时会提示编译错误。这样我们就会有机会修正自己的编码实现,从而解决“假”继承问题。

final

final可以阻止函数重写,亦可禁止子类派生。在派生类的声明时添加final可禁止子类派生,在虚函数声明时添加final可禁止派生类重写。

禁止派生

class Window final
{
public:virtual void Draw() const;
};class View: public Window 
{
public:virtual void Draw() override;
};

声明Window为final,这样View声明继承Window,编译器在编译时会提示错误。

禁止继承

class Window
{
public:virtual void Draw() const final;
};class View: public Window 
{
public:virtual void Draw() override;
};

声明基类Window中的成员函数Draw为final,那么在子类View中如果重写了Draw,编译器在编译时也会提示编译错误。

总结

本文从C++98&C++03标准中存在的问题入手,深入浅出的介绍了C++11引入final&override的原因及其所解决的问题。

相关内容

热门资讯

“双标”换卡背后,银行还需多些... 新华社记者 颜之宏、杨深深 持到期银行卡和身份证去银行网点换新卡,却被要求“必须交回旧卡才能取新卡”...
“离境退税2.0”带动“中国购... 【环球时报综合报道】编者的话:5月18日,商务部等6部门联合发布《关于加力优化离境退税措施扩大入境消...
一年烧掉2000亿、市值蒸发3... 商业润点 |Biz Run Review 三国归晋,用了六十年。即时零售的"三国杀",才刚刚开局...
原创 金... 2026年5月22日,国内黄金市场呈现出令人咋舌的价格鸿沟。基础金价徘徊在每克995.3元,而回收价...
原创 人... SpaceX的星舰V3终于在全球瞩目中成功升空。北京时间5月23日清晨,这颗高达124米的巨型火箭顺...
原创 被... 5月19日,欧洲议会掀起了一场引人注目的风暴,以压倒性的票数通过了最新的钢铁进口规定。 这套规则...
光纤量价齐升,烽火通信加快布局... 烽火通信(600498)5月22日披露的投资者关系活动记录表显示,公司于5月21日参加了中国信息通信...
原创 突... 今天5月24日一大早,打开行情一看,国际现货黄金报4508.25美元/盎司,单日跌了26.68美元,...
企业快讯 | 携手联通!狄耐克... 狄耐克 厦门总商会副会长企业 厦门狄耐克智能科技股份有限公司 与中国联通厦门分公司 将5G智慧“嵌入...
美银策略师警告:SpaceX与... 环球网 据彭博社报道,美国银行首席投资策略师迈克尔·哈特奈特(Michael Hartnett)最新...
卸任55天后,知名基金经理任相... 【导读】卸任55天后,知名基金经理任相栋“奔私”谜底揭晓 见习记者 闫军 知名基金经理任相栋“奔私”...
原创 大... “免签+手机刷一切”就能让老外连夜订机票?2026年一季度,阿根廷人来华暴涨九倍,北京三源里菜市场三...
从泰山顶峰掉落!“大佬背后的大... 文/刘工昌 他曾是柳传志的“大哥”,助力联想完成混合所有制改革;是史玉柱眼中的“贵人”,帮他东山再起...
原创 2... 最近网上流传出一份2030年GDP10强预测榜单,其中一些城市位次的变化也挺有趣的。上海排在第一,深...
原创 全... 2026年3月的全球美债市场迎来剧烈变动,彻底打破了长期稳定的持仓格局。 根据美国财政部发布的国际资...
全球都在给这几只“疯牛”烧钱 近段时间,AI行情再次成为全球资本市场主线,但舞台中央的“主角”发生了变化:投资者不再只偏好云厂商和...
【财闻联播】“硬刚监管”?老虎... ★ 宏观动态 ★ 商务部:1—4月全国吸收外资2876.9亿元人民币 据商务部网站,2026年1—4...
燕京啤酒营收净利双增:U8增速... 蓝鲸新闻5月22日讯(记者 朱欣悦)燕京啤酒(000729.SZ)打了一个翻身仗。 2025年燕京啤...
原创 帮... 老铁们,这周有个事儿挺有意思,估计不少基民都看懵了:都说科技是主线,芯片是未来,可数据显示,年内火爆...
4家银行AIC现身存储巨头股东... 近日,资本市场热度颇高的两家存储巨头长鑫科技集团股份有限公司(以下简称“长鑫科技”)、长江存储控股股...