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. 用法:放在 函数 参数列表 后面。
    意思是 禁止 基类的派生类 重写 基类此虚函数
  2. 用法:在类声明时,放在 类名 后面
    意思是 禁止继承 该类

总结

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

参考数据:C++ primer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值