C++:管理虚方法:override和final
Posted 敲代码的Messi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++:管理虚方法:override和final相关的知识,希望对你有一定的参考价值。
前言
虚方法实现的动态多态给我们的程序 带来了很多便利和操作的空间。但是其 也 带来的一些编程陷阱。
override
假设 一个 派生类 想覆盖重写 一个 基类的虚函数,如果程序员因为粗心导致其函数特征标不同的话,导致的的是 派生类 隐藏重名的基类虚函数,而不是覆盖。
class A
public:
virtual void show(char);
;
class B:public A
virtual int show(std::string);
;
如上图所示,我们 使用下面代码会报错。
B b;
b.show('a');
基类的 虚函数被我门 隐藏掉了,我们需要 手动加上作用域去调用父类的虚函数:
b.A::show('a');
这样虽然 通过,但是已经和我们的 运行时多态背道而驰了。
那有没有一个方法,显示的告诉编译器,我们要重写覆盖基类的虚函数,否则我们在实现 函数体时,给我们报错。
这就是 override的作用,如果我们声明的虚函数 和基类的不匹配,则编译器报错。
class B:public A
virtual int show(std::string) override ;// error
;
final
用法:放在 函数 参数列表 后面。
意思是 禁止 基类的派生类 重写 基类此虚函数。
总结
- override 和 final 都不是关键字,而是 具有特殊含义的标识符。我们可用作 常规标识符。比如说变量名等(但是不建议如此做,因为可能会有意向不到的错误,即使编译器有上下文感知)。
int override = 1; //不建议
int final = 2; // 不建议
- 其 加强了 我们对 虚函数的控制。
- 都是 C++11 的新特性。
参考数据:C++ primer
以上是关于C++:管理虚方法:override和final的主要内容,如果未能解决你的问题,请参考以下文章