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

相关内容

热门资讯

亚朵节后价格“跳水”超70% 春节过后,部分热门小城的亚朵酒店房价上演“过山车”行情,房价节前飙升,节后迅速跳水,巨大的价格波动引...
原创 金... 你绝对想不到,同样一克999足金,在深圳水贝批发市场只要1334元,走进周大福门店却变成1545元,...
德兰明海冲击港交所!递表前大手... 又一家储能企业“叩响”了港交所大门。近期,港交所官网显示,中小型用户侧储能企业深圳市德兰明海新能源股...
绿茶集团、猫眼娱乐发布正面盈利... |2026年2月25日 星期三| NO.1绿茶集团发布正面盈利预告 2月24日港股收市后,绿茶集团(...
安宁市的历史文化及名人有哪些 安宁市,这座坐落在彩云之南的城市,宛如一颗璀璨明珠,散发着迷人的历史文化魅力。在这里,岁月留下了深深...
中国央行连续12个月加量续作M... 来源:中国新闻网 中新社北京2月24日电 (陶思阅)中国央行24日发布中期借贷便利(MLF)招标公告...
不是15%?特朗普10%全球关... 据美国海关及边境保卫局(CBP)发布消息,特朗普政府将实施的新全球关税为10%。 第一财经收到的CB...
2026年春节出游人次、消费金... 2026年春节,为期9天的超长假期点燃了全国消费热情,多项核心数据创下历史纪录。 经文化和旅游部数据...
美国联邦存款保险公司(FDIC... 美国联邦存款保险公司(FDIC):美国银行业存款季环比下滑2%。
2026春节AI大战深度复盘:... 主编温静导读:2026年春节,元宝、千问、豆包三大巨头以红包、免单为杠杆,发动了一场规模空前的用户争...
期市节后首日金属板块普涨 白银... 本报记者 王宁 2月24日,春节后的首个交易日,国内期货市场呈现涨多跌少态势。 从板块表现来看,农产...
月跌超10%背后:软件行业,将... 此前一天,2月23日,人工智能公司Anthropic宣布,其Claude Code工具可用于在IBM...
公告精选 |《飞驰人生3》票房... 控制权收购 东阳光(600673.SH):公司正在筹划通过发行股份的方式收购宜昌东数一号投资有限责任...
东阳光:筹划收购东数一号控制权... 上证报中国证券网讯(记者 骆民)东阳光公告,公司正在筹划通过发行股份的方式收购宜昌东数一号投资有限责...
原创 高... 你有没有发现,几年前人人都在拼命买房,而现在,越来越多人开始思考,房子,到底还是不是财富? 这几年,...
这个春节,中国经济热力值拉满 2026年的春节,注定要在中国消费市场上留下浓墨重彩的一笔。 当9天的超长假期遇上持续加码的政策红利...
2026年中国汽车产业十大趋势... 2025年,中国汽车产业在连续17年产销量稳居全球第一的基础上,再次交出了一份充满变革与挑战的答卷。...
2022年天猫烘焙厨电行业趋势... 今天分享的是:2022年天猫烘焙厨电行业趋势白皮书 报告共计:7页 烘焙厨电迎来新变革:从“功能单一...