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的原因及其所解决的问题。

相关内容

热门资讯

摩通:华尔街银行业绩强劲提振欧... 观点网讯:7月22日,华尔街大型银行第二季度业绩表现强劲,提振了市场对欧洲投资银行即将开启的财报季的...
广州拟推动房地产纾困和发展 引... 观点网讯:7月22日,“十五五”时期,广州拟切实推动房地产纾困和发展,引导房地产市场企业转型升级。 ...
AI投入成“无底洞”?谷歌资本... 隔夜美股三大指数集体收低,道琼斯工业指数下跌0.01%报52218.58点,标普500指数跌0.14...
新太空经济从“起势”迈向“成势... 当前,全球正处于新一轮科技革命和产业变革加速演进的关键节点,人工智能、合成生物学、固态电池、高端算力...
金价四连涨,水贝又挤满人 每经记者:赵景致 每经编辑:何小桃,廖丹 记者|赵景致 编辑|何小桃 廖丹杜恒峰校对|金冥羽 金价在...
专访微亿智造董事长张志琦:在“... 本报(chinatimes.net.cn)记者石飞月 上海报道 在刚刚过去的2026世界人工智能大会...
Alphabet CEO:市场... 美东时间周三(7月22日)盘后,在Alphabet财报电话会上,公司CEO Sundar Picha...
毕马威:香港基金税制改革料吸引... 观点网讯:7月22日,毕马威发布《香港资产管理及私募股权展望》报告,指出香港基金免税制度及附带权益税...
维护资本市场平稳运行,组合拳来... 重要新闻提示 7月20日,证监会召开证券公司及基金机构座谈会,听取各方关于促进资本市场平稳健康发展的...
原创 缩... 其实这个阶段,反攻继不继续,对我来说没啥意义。因为小登估值依旧高高在上,随时可能像上周五,带崩老登。...
易方达张坤,罕见调仓 图/视觉中国 昔日公募圈“一哥”,也不“爱”白酒了。 7月21日,易方达知名基金经理张坤旗下多只产品...
宽基ETF连续2日净流出 7月23日,本周二、周三,宽基ETF连续2日资金流出。 数据显示,7月22日,ETF市场净流出216...
367 款新品换不来年轻人一句... 作者|极点商业 张先森 2026年初夏,#康师傅冰红茶卖不动了#登上热搜。 网友对此的反应颇为两极...
1元净资产市场只给5毛8!银行... 继中信银行、招商银行之后,光大银行也于7月20日在投资者互动平台透露,该行已成立市值管理小组,全面统...
风险等级为何需要运作机制更关键... 在基金投资领域,风险等级是投资者评估基金产品的重要参考指标之一。然而,很多投资者往往只关注风险等级的...
刚刚!万亿“光模块一哥”正式招... (来源:上市之家) 7月22日,中际旭创股份有限公司(300308.SZ)正式刊发H股招股章程,启动...
智象未来完成15亿元C轮融资,... 智象未来(合肥)信息技术有限公司(以下简称“智象未来”)是一家全球多模态生成式人工智能创新企业,也是...
半年赚170%、规模565亿,... 来源:市场资讯 来源:资管网 半年赚170%,管理规模从89亿干到565亿。 然后他减仓了。 财通基...
Token账单背后的资本博弈 最近大家可能有一个困惑:为什么大模型概念股,看似业务高速增长、调用量节节攀升,但估值在经历了高速攀升...
Costco签约入驻 京东成为... 观点网讯:7月22日,全球知名会员制仓储零售商Costco(开市客)与京东达成合作,京东成为Cost...