首页 > 编程语言 >C++ 11 :override 关键字的使用

C++ 11 :override 关键字的使用

时间:2023-05-02 21:55:10浏览次数:64  
标签:11 重写 void C++ 编译器 override 方法 public

override 关键字

作用:在成员函数声明或定义中, override 确保该函数为虚函数并覆写来自基类的虚函数。

位置:函数调用运算符之后,函数体或纯虚函数标识 “= 0” 之前。

使用以后有以下好处:

1.可以当注释用,方便阅读

2.告诉阅读你代码的人,这是方法的复写

3.编译器可以给你验证 override 对应的方法名是否是你父类中所有的,如果没有则报错.

override 使用举例

如果你想重写父类的方法,比如toString()方法:

#if 1

public :

virtual String toString() override {

//...

}

#else

public :

virtual String toString() override=0;

#endif

正确的是:

public :

String toString() override {

//...

}

假如不小心把方法名写错了而没写 override ,这时编译器是可以编译通过的,因为编译器以为这个方法是你的子类中自己增加的方法。如:

// 注意这里的小写方法,实际上是错误的。

public :

String tostring() {

    //...

}

 

相反,如果你很机智,在知道自己要重写父类的方法,加上了 override 标签后,编译器会检查出重写方法错误,会保证你重写父类方法的正确性。

例子

#include<iostream>

using namespace std;

 

class base

{

public:

    virtual void fun1(void)=0;

};

 

class derived : public base

{

public:

#if 1 //OK

    void fun1(void) override {

        cout << "a fun1" << std::endl;

    }

#else // err

    void fun2(void) override {

        cout << "a fun1" << std::endl;

    }

#endif

 

private:

    /* data */

};

 

int main(int argc, char *argv[])

{

    derived test;

    test.fun1();

    return 0;

}

总结:在重写方法时,最好加上这个 override 这个关键字 以 加强代码规范。

如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。

若在页首无特别声明,本篇文章由 Schips 经过整理后发布。

博客地址:https://www.cnblogs.com/schips/

https://www.cnblogs.com/schips/p/cpp11_override.html

 

标签:11,重写,void,C++,编译器,override,方法,public
From: https://www.cnblogs.com/im18620660608/p/17368366.html

相关文章

  • c++ 自由储存区和堆
    在C++中,内存区分为5个区,分别是堆、栈、自由存储区、全局/静态存储区、常量存储区谈到自由存储区与堆的区别,就需要了解new与malloc的区别。实际上堆是C语言的关键术语,是操作系统所维护的一块特殊内存,它提供了动态分配的功能。用户使用malloc进行堆内存申请,使用free实现堆内存的释......
  • 【C++】设立一组状态,在程序运行过程中设置对象的某个状态,检查对象是否满足所有的状态
    `#include//定义状态枚举enumState{STATE_A=1<<0,//0001STATE_B=1<<1,//0010STATE_C=1<<2//0100};classMyClass{private:intcurrentState;public:MyClass():currentState(0){}//设置状态voidsetState(Statestate){......
  • 11.迷宫问题(BFS 储存路径)
    迷宫问题↑题目链接题目给定一个\(n×n\)的二维数组,如下所示:intmaze[5][5]={0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上......
  • vcpkg:一站式C++库管理,简化工作流程
    简介vcpkg是一个用于在Windows系统上管理C++库的开源工具。它允许开发人员通过简单的命令行界面安装、管理和卸载各种C++库,并自动解决它们的依赖关系。vcpkg拥有一个庞大的库集合,包括Boost、OpenCV、Qt、SDL2等等,而且不仅限于Windows平台,还支持在Linux和macOS上进行交叉编译。......
  • AtCoder Regular Contest 119 F AtCoder Express 3
    洛谷传送门AtCoder传送门很厉害的题!考虑所有车站已确定,如何求\(0\)到\(n+1\)的最短路。设\(g_{i,0}\)为只考虑\(0\simi\)的点,到\(i\)和它左边第一个\(\text{A}\)的最短路,\(g_{i,1}\)同理。有转移:若\(s_{i-1}=\text{A},s_i=\text{A},g_{i,0}\getsg_{......
  • 第11讲 AXI_FULL自定义总线详解
    DDR3 IP基础知识  (1条消息)快速上手XilinxDDR3IP核----汇总篇(MIG)_ddr3xilinx_孤独的单刀的博客-CSDN博客DDR3_MIG_TB   moduletop(  output    [31:0]   c);localparam[15:0]  a=65535;localparam[15:0]  b=25687;assignc=a*......
  • 11 ETH-反思
    《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click11ETH-反思目录11ETH-反思Issmartcontractreallysmart?只是代码合同。smartcontractisanythingbutsmart.不可篡改性,其实是一个双刃剑......
  • 23.5.2 NOIP2011 Day1提高游记
    今天做的比较得愉快快呢,除了第三题hh1.铺地毯这题我不做太多评价,纯纯的一道大水题。注意遍历数据的时候倒着遍历,还有就是不能用二维数组,会MLE。code:1#include<bits/stdc++.h>2#defineN100053usingnamespacestd;4inta[N],b[N],g[N],k[N];5inlinelongl......
  • CF911F Tree Destruction
    题意:给你一棵\(n\)个结点组成的树,你需要对树进行\(n-1\)次操作,一次操作包含如下的步骤:选择两个叶子结点将这两个结点之间简单路径的长度加到答案中从树上删去两个叶子结点之一初始答案为\(0\),显然在\(n-1\)次操作之后树上只剩下一个结点。计算最大的答案,并构造一组......
  • Win11卸载“连接手机”UWP应用
    孽缘起因Win11提示可以联机手机,在电脑上能读取到手机上的通知,短信,通话等,也是闲着无事,就安装了试了试,发现其实没有MIUI+好用,就另外装上之后电脑玩游戏时CPU占用规律性的100%,我怀疑有bug,就准备卸载。结果呢?呵!好家伙,这鬼东西不让卸载!流氓行径!微软你学啥不好学这玩意,你这......卸......