c++11 中 override 与 final
- 重点:为什么 c++11 要引入这两个关键字?
- 为了解决什么原来所不能解决的什么问题?
- 具体怎么使用,以及怎么解决的相关问题?
重载
(overload)、重写
(override,有的书也叫做“覆盖”)、隐藏
(重定义)(redefinition)的区别?
搞清楚重载、重写、隐藏
这里简单区分出其区别,搞懂这个是理解引入
override
与final
关键字的关键!
override
- 指定子类一个虚函数复写基类的一个虚函数;
- 保证该重写的虚函数与基类的虚函数具有相同的签名。
- 所谓的签名:返回值类型、函数名、参数、特殊关键字。
class A { public: virtual void Func() {}; }; class B : public A { public: virtual void Func() override {}; //保证该重写的虚函数与基类的虚函数具有相同的签名 };
final
- 指定某个虚函数不能再派生中被覆盖,或者某个类不能被派生;
- 阻塞类进一步派生;
- 阻塞虚函数进一步重写。
class A { public: virtual void Func() {}; }; class B final: public A { //阻塞类进一步派生 public: virtual void Func() final {}; //阻塞虚函数进一步重写 }; class C : public B { //报错 public: virtual void Func() final {}; };
充电站
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习