【C++】四、重载,重写,重定义

On the convergence of FedAvg on non-iid data 阅读详情


1 重载

1.1 定义

重载指的是在同一个作用域内,两函数的函数名可以相同,但是参数不能完全相同,可以是参数类型不同或者是参数个数不同,至于返回值,不影响重载。

1.2 代码解析

//1、函数重载从底层上来说,还是两个不同的函数!
//函数会被编译成_test_int_int
int test(int a,int b){ return 0; }//a

//函数会被编译成_test_int_double
int test(int a,double b){ return 0;}//b

//2、返回值类型不同不可以构成重载
void test(int a,int b){  }//c 会报错,与a函数相同

int main(){
	test(1,1);
    test(1,2.2);
}

2 重写

2.1 定义

重写指的在继承关系中,子类中定义了一个与父类极其相似的虚函数。

具体怎么相似:函数名必须相同,参数列表必须相同,返回值可以不相同,但是必须是父子关系的指针或引用。

2.2 应用

通过重写,可以实现动态多态,如果去掉父类的虚函数的virtual,则构不成多态,如果去掉子类虚函数的virtual可以构成多态,可以理解为编译器优化。

3 重定义

3.1 定义

重定义也叫隐藏,指的是在继承关系中,子类实现了一个和父类名字一样的函数,(只关注函数名,和参数与返回值无关)这样的话子类的函数就把父类的同名函数隐藏了。

a)如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。

b)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。(如果有virtual就成重写了)

4 重载重定义与重写

下面的代码有点绕,不过理解了,你就通透了

#include <iostream>
using namespace std;
class Base
{
private:
    virtual void display() { cout<<"Base display()"<<endl; }
    void show(){ cout<<"Base show()"<<endl; }
public:
    void exec(){ display(); show(); }
    void fun(string s) { cout<<"Base fun(string)"<<endl; }
    void fun(int a) { cout<<"Base fun(int)"<<endl; }//overload:两个fun函数在Base类的内部被【重载】 
    virtual int function(){}
};
class ClassA:public Base
{
public:
    void display() { cout<<"ClassA display()"<<endl; }//override:基类中display为虚函数,且参数列表一直,故此处为【重写】 
    void fun(int a,int b) { cout<<"ClassA fun(int,int)"<<endl; }//redefining:fun函数在Base类中不为虚函数,故此处为重【重定义】 
    void show() { cout<<"ClassA show()"<<endl; }//redefining:理由同上
    
    //子类会偷偷继承父类的方法哦! 
    int function(int a){cout<<"ClassA fun(int)"<<endl;}//overload:注意这是重载而不是重写,因为参数列表不同,在编译时ClassA中其实还有个编译器自己偷偷加上的从Base继承来的int function(){};
    
    
};
int main(){
    ClassA a;
    Base *base=&a;
    cout<<"0========="<<endl;
    base->exec();//display()是ClassA的,因为【重写】 ,show()是Base自己的【理解重写与重定义的不同】 
    cout<<"1========="<<endl;
    a.exec();//结果同上
    cout<<"2========="<<endl;
    a.show();//show()是ClassA【重定义】的
    cout<<"3========="<<endl;
    base->fun(1);//fun()是Base自己的,因为直接从对象base调用
    cout<<"4========="<<endl;
    a.fun(1, 1);//fun()是ClassA重定义的
    return 0;
}

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

相关推荐

5V转±12V无变压器双boost电路

最近有个新项目,需要±10V范围的模拟量输出(非隔离),对于5V以下供电的控制板而言单端输出绝对没问题,可现在需要有正负输出,是少不了正负电源的,因此准备设计一个5V转±12V的电源,然后选择一个双向供电的运放,来实现单端模拟量信号向双向模拟量信号转换。 本文就来分享一下5V转±12V电源的设计。对于有类似双向电源需求的场合,大多使用变压器通过增加多个绕组来实现,而对于体积空间有要求的场合来讲,变压器实在是太大了,另外对于一些成熟的项目,变压器如果是已经设计好的,再额外增加绕组需要重新设计,费时费力。于是,

qq_30388337的博客 1万+

重写、重载、重定义三者的概念

(1)重写(override):重写也可以看做覆盖,子类重新定义父类中具有相同名称和参数的虚函数,函数特征相同,但函数的具体实现不同,它主要在继承关系中出现。被重写的函数不能是static的,但必须是virtual的。 (2)重载(overload):重载是函数名相同,参数列表不同,重载只是在类的内部存在,但是不能返回类型来判断。 (3)重定义:重定义也叫作隐藏,子类重新定义父类中具有的相同名...

lmq33771的博客 4572

保姆级教程:用TIA Portal V17给S7-1200 PLC和HMI做个联调仿真(附抢答器完整项目包)

本文提供了一份详细的TIA Portal V17教程,指导如何实现S7-1200 PLC与HMI的联合仿真开发。通过抢答器项目实例,涵盖从环境搭建、PLC编程到HMI设计的全流程,帮助工程师高效完成工业自动化系统的虚拟调试,显著提升开发效率。

weixin_30417487的博客 630

函数的重载、重写和重定义简述(c/c++知识篇)

1.函数重载(Function Overloading) 1、什么是函数重载 在同一个类中(同一个作用域中/在类的内部),存在一组函数名相同,函数的参数列表不同(参数的个数、类型、顺序),函数有无 virtual 关键字都可以,我们把这组函数称为函数重载。 2、为什么使用函数重载(函数重载的好处 由于函数重载可以在同一个作用域内,使用同一个函数名 命名一组功能相似的函数,这样做减少了函数名的数量,避免了程序员因给函数名命名所带来的烦恼,从而提高程序的开发的效率。 3、函数重载的条件 1 必须在同一

栋哥修炼日记 1万+

【STM32】STM32 CANFD外设的几种消息接收过滤模式

在控制器区域网络(CAN)系统中,正确配置消息过滤器对于有效管理网络通信至关重要。特别是在使用Flexible Data-rate Controller Area Network(FDCAN)时,选择合适的过滤器类型可以大大提高网络效率和消息处理速度。

林愿留的博客 6230

DAC8568控制器实战:如何用STM32实现多通道同步输出(附完整代码)

本文详细介绍了如何使用STM32微控制器驱动TI的DAC8568多通道DAC控制器,实现高精度的多通道同步模拟信号输出。内容涵盖硬件设计要点、SPI时序精准配置、驱动层命令构建,并重点解析了通过LDAC引脚实现同步更新的核心策略,提供了完整的代码框架和实战案例,帮助工程师快速解决多通道同步输出的工程难题。

weixin_29179311的博客 171

重载、重写、重定义

重载、重写、、重定义

qq_43508270的博客 2143

从2804云台电机到桌面机械臂:一个STM32/GD32玩家的FOC驱动踩坑全记录

本文详细记录了从2804云台电机到桌面机械臂的FOC驱动开发历程,涵盖了硬件选型、驱动方案优化、软件调试等关键环节。特别分享了L6234P驱动芯片的发热问题、AS5600编码器的I2C通信陷阱以及PID调参的实战经验,为DIY爱好者提供了宝贵的参考。

weixin_26897585的博客 482

重载、重定义、重写(覆盖)、隐藏的定义与区别

今天在学习Java中《类和对象》这一章时,我看到了熟悉的重载和重定义,突然想到自己在学习C++时也遇到过这些概念,而且当时还没搞懂,仔细一想,我好像现在也没搞懂。 于是我立马扔下手中的Java,离开自习室,在优快云上查询这两个概念的区别,这不查不知道,一查吓一跳,我又碰到一个非常熟悉的大兄弟----重写,和从未听过的一个老哥们----隐藏。 这四个混在一起。完了,更懵了。 但是功夫不负有心人啊,还是让孩子搞懂了这几个玩意,我可真是个小天才! 那我们来看下这四个概念的内容以及区别吧 ...

m0_53133879的博客 4367

数字逻辑Fundamentals of Digital Logic with Verilog Design | 3rd Edition Solutins Chapter 2(step by step)

数字逻辑第二章习题和详细步骤 2-1 ~ 2-78

weixin_62651190的博客 2308

一文讲透 SAP VDM 命名里的前缀与后缀:看懂 I_、C_、A_,把 CDS 视图栈搭得又稳又好用

SAP S/4HANA 的 CDS 视图命名规范解析 摘要:本文详细解析 SAP S/4HANA 中 CDS 视图的 VDM 命名规范。通过前缀(如 I_、C_、R_)区分视图层级,后缀标记附加角色,结合 @VDM.viewType 注解形成完整语义体系。I_作为稳定接口层,C_面向特定场景裁剪,R_限定应用域内复用,A_提供远程 API 接口。命名规范使团队能快速识别视图用途、依赖关系和扩展边界,确保模型长期可维护性。文章结合制造业物料主数据、Fiori 应用等实际案例,说明如何通过规范命名构建清晰的视图

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 220

c++类流操作运算符的重定义

对于流操作运算符我们需要注意的是函数的返回类型应该是流输入类型的引用或者流输出类型的引用,因为如果代码是 cout<<a<<b; 我们对a执行完cout函数之后,我们应该再次将cout返回给b,使b也能正确的被调用。 #include <iostream> using namespace std; class C...

weixin_30645617的博客 292

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++:重载,重定义,重写的区别

这是比较容易混淆的概念,在此整理,以便理解。 一:重载 重载指的是在同一个作用域内,两函数的函数名可以相同,但是参数不能完全相同,可以是参数类型不同或者是参数个数不同,至于返回值,不影响重载。 如图,构成了重载: 如何实现重载? C++代码在编译时会根据参数列表对函数进行重命名,例如void Test(int a, int b)会被重命名为_Test_int_int,void Tes...

来信 2万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

菜鸟学C++ (分清楚C++中重载、重写和重定义)

1、背景 在C++里有必要弄清楚他们三者的不同。 1.1 参考资料 https://www.cnblogs.com/weizhixiang/articles/5760286.html 2、三者的不同详细 重载(overload):是函数名相同,参数列表不同,override只是在类的内部存在。 重写(override),也叫覆盖。子类重新定义父类中有相同名称和参数的虚函数(virtua...

zhejfl的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【C++】重载、重写、重定义的辨析

重载、重写、重定义对比 一、重载(overload) 二、重写 / 覆盖(override) 三、重定义 / 隐藏(redefining) 为什么在虚函数中不能使用 static 关键字? 重写函数的访问修饰符可以不同吗?

m0_74195626的博客 2001

C++重写和重定义和重载

概念重定义通常也叫隐藏,是指在派生类中重新定义了与基类中同名的非虚函数(普通函数),或者改变了基类中同名函数(无论是否虚函数)的参数列表等情况,使得派生类中的同名函数将基类中的同名函数隐藏了起来。这并非是为了实现多态,而是在派生类中重新定义了一个和基类有同名情况的函数而已。规则及特点只要同名就可能隐藏:只要派生类中有和基类同名的函数(无论参数是否相同),就会发生隐藏现象。如果想在派生类中访问被隐藏的基类同名函数,可以通过使用基类名加作用域限定符()来访问,例如。参数不同也隐藏。

Visual_progress的博客 2754

C++ -- 重载、重定义、重写的区别

一.重载1.在同一个作用域下,函数名相同,函数的参数不同(参数不同指参数的类型或参数的个数不相同)2.不能根据返回值判断两个函数是否构成重载。3.当函数构成重载后,调用该函数时,编译器会根据函数的参数选择合适的函数进行调用。4.构成重载的例子:#include&lt;iostream&gt;using namespace std;int Add(int a, int b){      return...

我的博客 1万+

C++函数重载、函数重定义、以及函数重写

在C++的学习中,肯定免不了对一些概念的辨析,但往往很多时候,百思不得其解。问题的关键在于自己是否注意到了一些细节。 一、函数重载(overload) 函数重载是什么? 其实,我们大可以认为这是编译器的一种机制,他会根据函数的相关特性来自动对你所调用的函数进行匹配,自动选择匹配的函数,从而这种自动匹配选择从而调用对应的函数的机制,我们就可以称为函数重载。 怎么样能构成函数重载? 函数重载是指在一个类中声明多个名称相同但参数列表不同的函数,这些的参数可能个数或顺序,类型不同,但是不能靠返回类型来判断。特征是:

qq_1628941121的博客 5645

C++重写(覆盖)、重载、重定义、多态

1 重写(覆盖)override   override是重写(覆盖)了一个方法,以实现不同的功能。一般用于子类在继承父类时,重写(覆盖)父类中的方法。函数特征相同,但是具体实现不同。 重写需要注意: 被重写的函数不能是static的,必须是virtual的 重写函数必须有相同的类型,名称和参数列表 重写函数的访问修饰符可以不同。尽管virtual是private的,派生类中重写改写为public、protect也是可以的 2 重载overload   overload是重载,一般是在一个类实现若

Liuqz2009的专栏 6506

C++函数重载、重写与重定义

C++函数重载、重写与重定义

-笔记- 4400

c++函数重载、重写、重定义区别与联系及协变

1.函数重载: 在C++种,函数重载是在同一作用域,函数名相同,但是参数列表:参数个数,参数类型,返回值(可同可不同)不同。总之,只要在同一作用域,只要函数名相同,就可构成函数重载。对于函数重载可查看这篇博客:https://mp.youkuaiyun.com/postedit/80551981 2.重定义(隐藏) 在基类和派生类中有同名成员,成员可以是变量,也可以是函数,如果是函数,不管参数或是返回值是否相...

sophia__yu的博客 3220

C++中重定义,重载,重写

C++中的重定义指在同一作用域内定义了同名的函数、变量或类型。重定义是编译器无法处理的语法错误,将导致程序无法编译通过。例如,在同一作用域内定义了两个函数名相同、参数列表相同的函数,就会产生重定义错误。C++中的重定义指在同一作用域内定义了同名的函数、变量或类型。重定义是编译器无法处理的语法错误,将导致程序无法编译通过。例如,在同一作用域内定义了两个函数名相同、参数列表相同的函数,就会产生重定义错误。如下是一个示例:```int add(int x, int y) { // 重定义。

weixin_46326585的博客 1978

重载重写和重定义

重载重写与重定义 一:重载和重写理解 1:函数重载 必须在同一个类中进行 子类无法重载父类的函数,父类同名函数将被名称覆盖 重载是在编译期间根据参数类型和个数决定函数调用 2:函数重写 必须发生在父类和子类之间 并且父类与子类中的函数必须有完全相同的原型 使用virtual声明之后能够产...

guonengneng的博客 3222

C++:重载、重写、重定义

C++ 重载、重写和重定义 重载:函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在一个类内部。 重写:即覆盖,一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数。 重定义:即隐藏,子类重新定义父类中有相同名称的非虚函数( 参数相同 ) 虚/非虚函数(参数不同),派生类的函数屏蔽了与...

free377096858的博客 1523

c++中,重载,重定义,重写 的区别

一:重载 在一个类中,函数名相同,参数列表不同(具体表现为参数个数或参数类型不同),至于返回型可同可不同。重载属于静态多态,而不是通过继承和虚函数实现的动态多态。编译器会根据这些函数的参数列表的不同,将同名的函数名称做修饰,从而生成不同名称的预处理函数。 eg: double  max(double x,double y), int  max(int  x,int y); 这两个函数就是...

leikun153的博客 3705

【C++】多态 ⑤ ( 重载 | 重写 | 重定义 )

一、重载、重写、重定义概念 1、重载 Overloading 2、重写 Overriding 3、重定义 Redefinition

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1893
上一篇: 【C++】三、const与字符串
下一篇: 【C++】五、拷贝构造与赋值构造
左耳听风
博客等级 码龄12年 325粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值