C++中override的作用

C++中override的作用

override关键字作用:

如果派生类在虚函数声明时使用了override描述符,
那么该函数必kif须重载其r基类中的同名函数,否则代码将无法通过编译。
C++ override从字面意思上,是覆盖的意思,实际上在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用。override是C++11中的一个继承控制关键字。overr,jfhide确保在派生类中声明的重载函数跟基类的虚函数有相同的声明。

override明ns确地表示一个函数是对基类中一个虚函数的重载。更重要的是,它会检查基类虚函数和。gj派生类中重载函数的签名不匹配问题。如果签名不匹配,编译器会发出错误信息。

override表示函数应当重写基类中的虚函数(用于派生类的虚函数中)。

在我们C++编程过程中,最熟悉bgf的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。还有一个典型应用就是在继承中也可能会在子类覆盖父类的方法。

公有继承包含两部分:一是“接口”(interface),二是 “实现” (implementation)。

前面的基类 Fish 都包含虚函数 Swim(),如下面的代码所示:

class Fish
{
public:
    virtual void Swim()
    {
        cout << "Fish swims!" << endl;
    }
};

假设派生类 Tuna 要定义函数 Swim(),但特征标稍微不同—程序员原本想覆盖 Finish::Swim(),
但不小心插入了关键字 const,如下所示:

class Tuna:public Fish
{
public:
    void Swim() const
    {
        cout << "Tuna swims!" << endl;
    }
};

在这种情况下,函数 Tuna::Swim()实际上并不会覆盖 Finish::Swim(),这是因为 Tuna::Swim()包含
const,导致它们的特征标不同。然而,这些代码能够通过编译,导致程序员误以为他在 Tuna 类中成功
地覆盖了函数 Swim()。从 C++11 起,程序员可使用限定符 override 来核实被覆盖的函数在基类中是否
被声明为虚的:

class Tuna:public Fish
{
public:
    void Swim() const override // Error: no virtual fn with this sig in Fish
    {
        cout << "Tuna swims!" << endl;
    }
};

换而言之, override 提供了一种强大的途径,让程序员能够明确地表达对基类的虚函数进行覆盖的
意图,进而让编译器做如下检查:
• 基类函数是否是虚函数?
• 基类中相应虚函数的特征标是否与派生类中被声明为 override 的函数完全相同?

该文章会更新,欢迎大家批评指正。

推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容
点击立即学习:C/C++后台高级服务器课程

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值