c++11 override and final
来源:互联网 发布:windows字体怎么设置 编辑:程序博客网 时间:2024/05/17 23:52
1.简介
C++为我们提供了继承和虚函数的重写特性。 在派生类中,重写虚函数不强制要求使用 virtual 关键字,并且C++并没有要求强制检查虚函数的重写是否真正覆盖了基类的虚函数,因为在派生类中,也可以增添新的虚函数,以供下一级的派生类重写。由于检查的不够严谨,就有可能产生错误。
2.有可能产生的错误
最常见的错误就是派生类想要重写基类的虚函数,但是由于参数类型的不同,导致结果和预期不同,例如:
输出结果为
对于函数func,派生类和基类的参数类型不同,虽然函数的返回值和函数名相同,并使用了virtual进行虚函数的声明,但实际上派生类并没有重写基类的虚函数,而是定义了自己的虚函数。使用const 进行限定也是一样,在基类中func2 为 const 函数,而派生类没有 const 进行限定,因此,派生类也并没有重写基类的虚函数。 pTest 的输出结果和我们原本预期的并不相同,其调用的是基类的虚函数。由上图输出结果可以看出。
3. override
为了避免上述问题的发生,C++11增添了override, override并不是一个关键字,而是一个用于标记虚函数重写的标识符,使用override 标记的类成员函数表示我们希望其重写基类相对应的虚函数。如果没有重写,编译器会报错。例如:
对DeriveClass 的两个成员函数使用了 override ,编译器知道我们期望重写基类的虚函数,但是由于基类并没有相匹配的虚函数,因此编译出错,出错信息如上述注释部分所示。
4.final
在一些情况下,我们并不希望某个成员函数再被任何派生类所继承,在java语言中,有final来进行限定,C++11也提供了 final (同 override一样不是关键字,只是特殊的标识符)。通过使用final对虚函数的限定,任何子类不能重写该函数,例如:
由注释部分可以看出,基类的func函数使用Final进行限定后,派生类无法再重写改函数。
5.总结
C++11新增添的 override 和 final 说明符可以使得虚函数的继承更加明确和安全。遵循新的规则,可以增进代码的可读性,使用final可以更好的对派生和重写虚函数进行限制。
- C++11 override and final
- c++11 override and final
- C++:override和final
- [整理]Override and Final CSK in C++11
- c++11 --- override and final 的阅读笔记摘要
- C++ 11 override final
- C++11:override 与 final
- C++11 override 和 final
- C++11 override 和 final
- C++11学习笔记(5) —— override and final
- C++11学习笔记(5) —— override and final
- c++11 特性 final与override关键字
- C++11 特性:显式 override 和 final
- 【c++11】override(重写)与final(最终)
- ## C++11中 final 和 override 说明符
- c++11 final与override说明符
- c++11 final override 关键字的运用
- c++11学习 override 和 final 关键字
- android 加载gif动图 自定义GifView
- PHP给前端返回一个JSON‘对象’
- UVA 1625
- javascript无法处理位数大于16位的整数
- 块级元素的一些小问题
- c++11 override and final
- 关于Fragment中getActivity为Null的问题
- Linux系统目录结构
- flow
- java.lang.NoClassDefFoundError: org/hamcrest/MatcherAssert 的解决办法
- 阿里云加密服务使用教程
- FL Studio双11提前购啦
- 6.Spring Cloud:服务容错保护(Hystrix服务降级)【Dalston版】
- Flex 布局教程:语法篇