C++中的override

C++ override使用详解 C++ override从字面意思上,是覆盖的意思,实际上在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用。在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。还有一个典型应用就是在继承中也可能会在子类覆盖父类的方法。       公有继承包含两部分:一是“接口”(interface),二是 "实现" 阅读详情

C++中的override与java等其他的OOP语言有一些不一样,举个例子来说,比如你有下面这个代码:

/*************************************************************************
    > File Name: test.cpp
    > Author: Baniel Gao
    > Mail: createchance@163.com 
    > Created Time: Mon 22 Aug 2016 09:58:20 PM CST
 ************************************************************************/

#include <iostream>
using namespace std;

class A {
public:
    A():i(0) {
        cout << "A::A()" << endl;
    }
    ~A() {
        cout << "A::~A()" << endl;
    }
    void print() {
        cout << "class A i: " << i << endl;
    }

    void print(int ii) {
        cout << "class A i: " << i << ", ii: " << ii << endl;
    }

protected:
    int i;
};

class B : public A {
public:
    void print() {
        cout << "class B i: " << i << endl; 
    }
};

int main()
{
    A a;
    B b;

    a.print();
    a.print(1);

    b.print();
    b.print(2);

    return 0;
}

如果你了解JAVA的话,很容易会觉得这个程序没有问题,但是编译的时候出现下面的错误:
这里写图片描述
这里我们g++给出的错误不是很友好,但是我们还是能够依稀明白些什么。它的意思是说,你要在第47行,也就是b.print(2);这行,要调用带有int参数的print函数,但是找不到!!有java的基础,这里总是感觉十分别扭!!在C++中的override,和java中是很不一样的,在C++中如果你定义个一个名称和父类相同的函数时,那么你就将父类的同名方法在此类中全部覆盖了!!即使返回值不一样也不行!!如果还是想要使用父类的带有int参数的print函数怎么办呢?有办法,可以这么调用:

b.A::print(2);

好吧,我承认这是一个很恶心人的语法,至少在一个写惯了java程序的人看来!!但是,这确实是一个巨大的坑,在项目中十足被坑了一把!!!

C++ 中的 noexcept override 这样写出的代码,才是健壮、高效、可维护的现代 C++ 代码! 阅读详情

相关推荐

FPGA篮球计分器:从需求分析到模块化实现的实战指南

本文详细介绍了FPGA篮球计分器的设计与实现,涵盖需求分析、模块化设计及实战调试。重点解析了24秒精确倒计时、12分钟比赛计时、比分统计和数码管显示等核心模块的Verilog实现,提供了按键消抖、状态机设计和BCD码处理等关键技术细节,帮助开发者掌握FPGA数字系统设计方法。

sql99的博客 217

C++关键字override

override的翻译是覆盖。实际上它在C++中可以检测哪些虚函数没有被重写并报错 注:在派生类的成员函数中使用override时,如果基类中无此函数,或基类中的函数并不是虚函数,编译器会给出相关错误信息。先定义一个基类,基类中的func被声明为一个虚函数 派生类对func函数重写 运行结果 今天做题时看见之前没见过的关键字override,浅浅记录一下...

ZER00000001的博客 1万+

TwinCAT3与Matlab Simulink集成开发:如何快速生成和调试TcCOM模块

本文详细介绍了如何将TwinCAT3与Matlab Simulink进行深度集成,实现从控制算法模型到实时TcCOM模块的高效开发。通过环境搭建、模型配置、代码生成、系统集成与调试的完整流程,工程师可以快速将Simulink算法部署到倍福实时控制平台,大幅缩短开发周期并提升可靠性。

ik67890123的博客 223

C++-[override]关键字使用详解

本文介绍了C++ override关键字使用详解以及与重载的区别。

沐槿的博客 5万+

Difftest踩坑笔记(一)

Difftest是差分测试框架,有什么用呢?高性能CPU的设计需要做复杂的测试,传统的测试方法运行较慢,而且出了问题很难定位,Difftest就是为了解决这两个问题。

http://www.icfgblog.com/ 4195

【人工智能】拒绝焦虑,理性突围:AI 时代 Java 工程师的职业重构与进化指南

摘要:在AI技术快速发展的背景下,Java工程师面临职业转型挑战。本文通过MECE原则解构工作内容,划分高替代风险区(如CRUD开发)、高增效潜能区(如逻辑优化)和高核心壁垒区(如架构设计),指出AI对不同任务的影响程度。从劳动经济学视角分析行业将呈现K型分化,初级执行者被替代,而精通AI协作的全栈工程师需求增长。文章强调警惕过度依赖AI导致认知能力退化,并提出转型路径:掌握AI驱动开发(AIDD)、深耕领域驱动设计(DDD)、拓展全流程能力及AI原生应用开发。最终结论指出,未来的核心竞争力在于结合AI工具

奶爸的编程之路,也就一周冷个三天 131

C++ override解释

       C++ override从字面意思上,是覆盖的意思,实际上在C++中它是覆盖了一个方法并且对其重写,从而达到不同的作用。在我们C++编程过程中,最熟悉的就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。还有一个典型应用就是在继承中也可能会在子类覆盖父类的方法。     &...

weixin_43124720的博客 5425

基于 Mask R-CNN 的实例分割:从零开始构建一个强大的分割模型

在本文中,我们将介绍如何使用 Mask R-CNN(Region-based Convolutional Networks with Masks)实现实例分割。实例分割是计算机视觉中的一种任务,旨在识别并分割图像中的各个对象。我们将讨论如何准备数据集、配置 Mask R-CNN 模型并在自定义数据集上进行训练。

斌擎科技 1242

【C++ 关键字 override】C++ 重写关键字override(强制编译器检查该函数是否覆盖已存在的虚函数)

如果派生类在虚函数声明时使用了override描述符,那么该函数必须重载其基类中的同名函数,否则代码将无法通过编译。 C++中的关键字override(重载)用于在派生类中声明一个函数与其基类中同名函数的关系。当派生类在虚函数声明时使用override描述符时,需要重载其基类中的同名函数,否则编译器将会提示错误。 这是因为在C++中,虚函数的定义与函数重载非常相似。虚函数定义的方式是使用关键字virtual在函数声明中进行声明,同时可以通过重载来指定函数的行为。如果派生类重载了基类中的同名函数,则该函数

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4847

三相五柱式消弧线圈自动测控装置设计与实现

本文设计了一种基于STM32的三相五柱式消弧线圈自动测控装置。该装置采用信号注入法检测系统对地电容电流,通过PID自适应算法调节消弧线圈电感值,实现单相接地故障时的快速补偿。硬件系统包含信号采集、注入、控制执行等模块,软件采用Goertzel算法提取特征频率信号,结合增量式PID实现精确控制。实验结果表明,装置电容检测误差小于2%,调谐响应时间小于50ms,满足配电网对消弧线圈自动调谐的技术要求。

AI的内部世界的博客 237

五种音频器件综合对比——《器件手册--音频器件》

音频器件当在蜂鸣片的两片电极之间接通交流音频信号时,蜂鸣片会根据信号的大小和频率发生振动,从而产生相应的声音。结构简单、造价低廉。广泛应用于玩具、电子表、电子仪器、电子钟表、定时器等电子电器方面。蜂鸣器是一种一体化结构的电子讯响器,采用直流电源供电,广泛应用于各种电子产品中作发声器件有源蜂鸣器:内部带震荡源,通电即发声,程序控制方便。无源蜂鸣器:内部不带震荡源,需用方波驱动,声音频率可控,价格相对便宜。计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品。

XU157303764的博客 1534

C++中的override关键字

文章目录1 C++中的override关键字 1 C++中的override关键字 作用: 提示程序的阅读者,这个函数是重写父类的功能。 防止程序员在重写父类的函数时,把函数名写错。 #include <iostream> using namespace std; class XiaoMi { public: virtual void func() { cout <&lt...

木子皿--啥都不会的菜鸟 953

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++ 中的 override 关键字详解

C++ 中的 override 关键字详解

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 1511

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++中的final和override关键字详解

可以在编译时进行检查,确保派生类中的函数确实是基类中虚函数的重写版本。可以确保某个类不被继承,这在设计中有时候是有必要的,例如为了保护某些核心功能不被修改或破坏。是两个关键字,用于对类和类成员进行修饰,提供了更强的编译时检查和更灵活的代码设计。用于修饰类,表示该类不能被继承。它将该类标记为最终类,禁止其他类从它派生。可以帮助确保派生类正确地重写了基类中的虚函数,提高代码的可读性和可维护性。用于标记派生类中的虚函数,确保它是基类中虚函数的重写版本。用于修饰虚函数,表示该虚函数在派生类中不能被重写。

N阶二进制的博客 1916

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

c++中的final与override

final与overridefinal关键字override关键字 final关键字 c++中的final关键字主要有两个用途: 用于类:告诉编译器该类不可被其他类继承,如: class End final{ ...... }; 则其他类再继承End时编译器将会报错 用于虚函数或纯虚函数的重写:告诉编译器该虚函数的重写到此结束,之后以该类为基类的类将禁止对该函数再进行重写(定义完全一致的函数会报错,定义符合重载的同名函数会遵行同名访问原则),如: class base { public:

来,骗!来,偷袭! 1407

C++中的virtual与override

当两个或更多的类从同一个基类虚继承时,只有一个基类实例会存在于最终的派生类对象中,从而避免了重复和二义性。纯虚函数是一个在基类中没有定义实现的虚函数。在派生类中,虚函数可以被重写。这允许我们通过基类的指针或引用调用派生类的函数实现,实现动态绑定。如果基类的析构函数是虚的,那么通过基类指针删除派生类对象时,派生类的析构函数也会被正确地调用。:通过纯虚函数,基类可以定义接口,而不提供实现,从而强制派生类提供特定的实现。是C++11引入的一个关键字,用于明确表示派生类中的函数意图覆盖(重写)基类中的虚函数。

weixin_49520696的博客 1899

c++11 中的final和override

一:final 指定某个虚函数不能再子类中被覆盖,或者某个类不能被子类继承 解释: 当在虚函数声明或定义中使用时,final 确保函数为虚并指定其不可被派生类覆盖。若这么做则程序非良构(生成编译时错误)。 当在类定义中使用时,final 指定此类不可在另一类的定义中的 基类说明符列表 中出现(换言之,不能派生于它)。若这么做则程序非良构(生成编译时错误)。final 亦可用于联合体定义,此情...

醉生梦死 741

c++11中的final和override关键字

目录 final关键字 final的第二个作用 override关键字 为了防止我们忘记重写虚函数,c++11提供了2个关键字来帮助我们检查 final关键字 修饰虚函数,被修饰的虚函数不能被重写 class A { public: virtual int add(int x, int y) final { return x + y; } }; class B :public A { int add(int x, int y) //修饰虚函数,被修饰的虚函数不能被重写 {

封茗世香 797

C++ override在大型项目中的5个实战技巧

在实际项目中,我遇到过因为忘记更新派生类中的函数签名导致的bug,有了override后这类问题就能被编译器提前发现。派生类在实现纯虚函数时加上override,不仅能让代码意图更清晰,还能确保实现的正确性。我曾经重构过一个项目,发现有派生类"实现"了一个不存在的纯虚函数,如果当时用了override关键字,这个问题就能在编译阶段被发现。在复杂的多重继承体系中,override能帮助我们理清函数重写的来源。通过这个平台,我能够快速验证override在不同继承关系中的行为,省去了本地搭建环境的麻烦。

GreyWolf12的博客 449

C++ 中的 override 和 overload的区别

在重写基类虚函数时,始终使用override关键字,确保编译器检查函数签名的正确性,避免意外的错误。在进行函数重载时,确保参数列表的差异足以让编译器进行区分,同时保证函数的语义一致性。如果需要在子类中使用基类的重载函数,使用using关键字显式引入基类的函数,避免隐藏问题。总之,在 C++ 中,理解override和overload的区别是掌握面向对象编程的重要一步。override强调的是子类对基类虚函数的重写,是实现多态的基础。而overload则允许同一作用域内定义多个功能类似但参数不同的函数。

红军不怕远征难,万水千山只等闲 2199

C++11中的override关键字

C++11中的override关键字 override可以显式的在派生类中声明,哪些成员函数需要被重写,如果没被重写,则编译器会报错。即:防止漏写 如果基类中无此函数,或基类中的函数并不是虚函数,编译器会给出相关错误信息。即:防止写错 参考文章 ...

Cristina的博客 472

C++中的Overload、Overwrite和Override

C++中的Overload、Overwrite和Override

1384

C++中的Overload、Override和Overwrite

  在C++语言中有一组基础的概念一直都容易混淆:Overload、Override和Overwrite分别表示什么意思?下面把这三个概念整理一下: 1. Overload(重载)   重载的概念最好理解,在同一个类声明范围中,定义了多个名称完全相同、参数(类型或者个数)不相同的函数,就称之为Overload(重载)。重载的特征如下: (1)相同的范围(在同一个类中);(2)函数名字相同;(...

weixin_33831196的博客 361

C++中的 "override"

我们的意图是在子类Derived1与Derived2分别重载父类Base::print(void), 在我们下面的代码中有没有发现什么问题呢? class Base { public: virtual void print(void){...} }; class Derived1 : public Base { public: void print(void){...} }; ...

高恩阳的博客 715

c++中的overload(重载)、override(覆盖)和隐藏

override:是指在不同作用域中,多个函数原型完全一样,而实现却不同的函数。在C++中,经常发生在类的继承中。当基类中的某个方法是virtual或pure virtual函数时(当然访问权限必须是public或protected,因为从C++设计思想上来讲private的函数

719
上一篇: Linux中的共享库之版本管理
下一篇: C++的inline
createchance
博客等级 码龄15年 156粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值