C++11新特性探究:显式override和final
C++中,我们一般可以以基类声明纯虚函数,然后让派生类继承并重写这个虚函数,用override表示显示覆盖基类方法,但一直没有提供一种方法来阻止派生类继承基类的虚函数。
C++11标准引入了final说明符,很好的解决了上面的问题。final告诉编译器,该虚函数不能被派生类重写。
废话不多说,上代码,试着指出来下面的代码有哪些问题?
class Base
{
public:
virtual void plant(int x) {}
};
class Derived : public Base
{
public:
void plant(int x) final {}
};
class SunDerived final : public Derived
{
public:
void plant(int x) {}
};
class GrandSunDev : public SunDerived
{
};
上述代码中,基类Derived的虚函数 plant 声明为final,那么,派生类SunDerived重写 plant 函数的时候,编译器会报错。
final说明符不止可以声明虚函数,还可以声明类,如果在类定义的时候,声明了final,那么,这个类将不能作为基类被其他类继承,SunDerived被声明为final,那么GrandSunDev再继承SunDerived的时候,编译器会报错。
注意:C++11标准中,无论是override还是final,都没有背作为保留的关键字,override只有在虚函数尾部才有意义,final只有在虚函数尾部以及类声明的时候,才有意义。
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-05-18 公网可用的RTMP、RTSP测试地址(更新于2021年3月)
2021-05-18 rtmp/rtsp/hls公网真正可用的测试地址
2021-05-18 Windows平台RTMP|RTSP播放器实现画面全屏功能
2021-05-18 Windows平台RTMP|RTSP播放器为什么要兼容GDI绘制
2021-05-18 Windows平台RTMP推送|轻量级RTSP服务实现本地摄像头|屏幕|叠加数据预览
2021-05-18 Android对接实现内网无纸化会议|智慧教室|实时同屏功能
2021-05-18 QT实现低延迟的RTSP、RTMP播放器