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

用法:放在 函数 参数列表 后面。
意思是 禁止 基类的派生类 重写 基类此虚函数

总结

  1. override 和 final 都不是关键字,而是 具有特殊含义的标识符。我们可用作 常规标识符。比如说变量名等(但是不建议如此做,因为可能会有意向不到的错误,即使编译器有上下文感知)。
int override = 1;  //不建议
int final = 2; // 不建议
  1. 其 加强了 我们对 虚函数的控制。
  2. 都是 C++11 的新特性。

参考数据:C++ primer

以上是关于C++:管理虚方法:override和final的主要内容,如果未能解决你的问题,请参考以下文章

C++初阶多态

C++从青铜到王者第十八篇:C++之多态

[C/C++]详解C++的多态

[C/C++]详解C++的多态

C++多态

C++ 纯虚函数 虚函数 override