函数 运算符 重载

成员运算符重载函数与友元运算符重载函数的比较 (1)对双目运算符而言,成员运算符重载函数参数表中含有一个参数,而友元运算符重载函数参数表中含有两个参数;对单目运算符而言,成员运算符重载函数参数表中没有参数,而友元运算符重载函数参数表中含有两个参数。 (2)双目运算符一般可以被重载为友元运算符重载函数或成员运算符重载函数,但有一种情况,必须使用友元函数: 例如,如果将一个复数与一个整数相加,可用成员运算符函数重载 “+”: Complex op... 阅读详情

        回首谭浩强《C++程序设计》,开篇就来讲讲重载。

        首先,函数重载。

        特点如下:

         ①重载函数的函数名相同。如求最大值的函数,int max(int a,int b)和double max(double a,double b)。

         ②声明时形参的个数或类型或顺序必须至少有一项不同。

         ③特别需要注意的是函数类型不能作为函数重载的一种标志。也即是,如果函数名相同、形参个数以及类型都对应相同,只有函数类型不同,

             这样的函数重载是错误的。因为编译系统无法知道调用哪个。

         看到这,你是否有这样的疑问:仅仅函数名不同,函数重载有何意义?应该说对于小型程序而言,重载和不重载区别并不是很大。但是,我们

         试想下:如果程序规模很大,这是又会如何呢?就拿前面的求最大值的函数来说,具体程序中可能要是要整数求最大值,单精度数求最大值,

          双精度数求最大值等等,如果都是不同的名字,那么我们就得时刻注意我们要调用哪个函数,容易出错。同名之后,这一问题就解决了。

          其次,运算符重载。

          ⑴为什么要有运算符重载?

              C++提供的运算符只是完成了标准数据类型的种种运算,比如加减乘除。但C++是面向对象,实际编程过程中必然会涉及到建立新类型。

              而这些新类型是无法直接运用C++提供的运算符的。需要重载。

          ⑵重载的方法?

              运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。所以,可以

              说:运算符重载的实质还是函数重载。

          ⑶运算符重载要注意哪些方面?

                ①只允许重载已存在的运算符。用户不能自己创造运算符。

                ②重载不能改变运算符运算对象的个数。

                ③重载不能改变运算符的优先级。

                ④重载不能改变运算符的结合性。

                ⑤重载运算符的函数不能有默认的参数。

                ⑥重载的运算符必须和由用户定义的自定义类型的对象一起使用,其参数至少有一个是类对象或类对象的引用。

                ⑦用于类对象的运算符一般必须重载,但也有例外,运算符“=”和“&”不必用户定义。

                ⑧应该使重载运算符的功能类似于该运算符作用于标准数据类型时所体现的功能。

                ⑨运算符重载函数可以是类的成员函数,也可以是类的友元函数,也可以仅仅只是普通函数。

               最后,介绍了前面的一些基础理论后,我用一个小程序来实现相应的功能。

               该程序是用来是实现复数与复数相加以及复数与双精度数相加的。其中有对“+”的重载函数,同时也体现了函数的重载。

               具体见程序注释部分。

             代码如下:(VC6.0下调试正确)

#include<iostream.h>

class Complex    //复数类
{
public:
	Complex();
	Complex(double a,double b);

	/*对“+”的重载*/
	Complex operator+(Complex &a);  
	
	/*对“+”的重载,以及函数重载*/
	friend Complex operator+(double &a,Complex &b);     
	friend Complex operator+(Complex &a,double &b);

	void display();

private:
	double real;
	double image;
};
Complex::Complex()
{
	real=0;
	image=0;
}

Complex::Complex(double a,double b)
{
	real=a;
	image=b;
}

Complex Complex::operator+(Complex &a)
{
	Complex c;

	c.real=real+a.real;
	c.image=image+a.image;

	return c;
}

Complex operator+(double &a,Complex &b)
{
	return Complex(a+b.real,b.image);
}

Complex operator+(Complex &a,double &b)
{
	return Complex(a.real+b,a.image);
}

void Complex::display()
{
	cout<<"("<<real<<","<<image<<"i)"<<endl;
}

int main()
{
	Complex c1(2,-1),c2(5,9),c3,c4,c5;

	cout<<"c1=";c1.display();
	cout<<"c2=";c2.display();

	c3=c1+c2;                 //复数相加
	cout<<"c3=";c3.display();

	double a;
	cin>>a;

	c4=a+c1;          //双精度数加复数
	cout<<"c4=";c4.display();

	c5=c2+a;          //复数加双精度数
	cout<<"c5=";c5.display();

	return 0;
}

            测试结果:


 

           写在最后:笔者能力有限,如有错漏之处,还请不吝赐教!

            

C++学习之路——函数重载和运算符重载 一、函数重载 C++允许在同一作用域中的某个函数和运算符指定多个定义,分 别称为函数重载和运算符重载 重载声明是指一个与之前已经在该作用域内声明过的函数或方法 具有相同名称的声明,但是它们的参数列表和实现不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。 C++中的函数重... 阅读详情

相关推荐

PTrade数据交互全流程详解:从本地文件上传到定时导出交易数据

本文详细解析了PTrade量化交易平台的数据交互全流程,涵盖从本地文件自动上传交易指令到定时导出成交数据的完整链路。通过文件媒介实现本地策略与云端实盘的安全、稳定对接,并提供了构建自动化、稳健数据流水线的实战配置方案与代码示例,助力量化工作流平滑过渡至实盘。

gg901的博客 883

【⑤C++ | 运算符重载】意义 | 限制 | 方法 | 规则 | 特殊运算符重载 | 应用场景

通过运算符重载,可以使自定义类型的操作更加直观和方便。但在进行运算符重载时,需要遵守一定的规则和限制,以确保代码的正确性和可维护性。

热爱编程的小K的博客 2464

Xilinx PCIe IP核示例工程仿真流程与关键任务解析

本文详细解析了Xilinx PCIe IP核示例工程的仿真流程与关键任务。通过搭建仿真环境、解读初始化日志,并深入剖析TSK_TX_MEMORY_WRITE_32等核心任务的TLP报文生成与交互过程,帮助开发者掌握PCIe IP核的仿真调试方法,为实际硬件设计提供可靠的验证基础。

weixin_28314575的博客 509

运算符重载作用

运算符重载是为了解决类对象之间的运算的,通常的运算符只用于算术运算,如常量int之间,因为编译器已经定义了;而一个类两个对象之间成员进行运算必须重新定义,让编译器在遇到对象运算时能按我们要求的进行运算,这就是运算符重载的意义,即重定义运算符,因此你可以看到,运算符重载就是为类对象服务的,那么两个对象的成员进行运算那必须先获得对象本身啦,所以运算符重载参数必须含有类指针或引用,这是主要客户。 运算符重载的声明operator 关键字告诉 编译器,它是一个运算符重载,后面是相关运算符的符号,如+...

qq_43517257的博客 4507

别再只插线了!用示波器‘偷看’USB-C PD协议握手全过程(附BMC/4B5B编码解析)

本文详细介绍了如何使用示波器捕获并解码USB-C PD协议的握手过程,包括BMC/4B5B编码的解析技巧。从硬件配置到波形分析,再到协议注入,为工程师提供了一套完整的实战解码手册,帮助深入理解PD协议的工作原理。

weixin_42526417的博客 404

故障排查:OpenClaw 更新后 feishu 插件路径失效的解决方法

OpenClaw 更新后 feishu 插件路径失效的解决方法发现问题→ Gateway 启动失败,报插件路径错误定位原因→ OpenClaw 目录结构变化,→解决问题→ 更新为正确的路径验证修复→ 使用确认一切正常。

刘一说的IT专栏 1306

运算符重载的概念和规则

运算符重载的概念 为什么我们需要运算符重载?因为自定义数据类型有时也需要使用运算符进行某些运算,比如加法运算,但是预定义的运算符的操作数只能是基本数据类型,所以自定义数据类型的运算需要进行运算符重载。 例如,有日期类Date声明如下: class Date { public: Date(int nYear, int nMonth, int nDay) { m_nYear=nYear; m_nMonth=nMonth; m_nDay=nDay; } // 构造函数 void show();

qq_36314864的博客 2110

题解:洛谷 P14357 [CSP-J 2025] 拼数

等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。小 R 想知道,在他所有能拼成的正整数中,最大的是多少。你需要帮助小 R 求出他能拼成的正整数的最大值。小 X 给了小 R 一个字符串。输出一行一个正整数,表示小 R 能拼成的正整数的最大值。中的任意多个数字,按任意顺序拼成一个正整数。,表示小 X 给小 R 的字符串。#普及-# #其他排序#洛谷:[P14357。

团爸讲算法 1398

c++为什么要进行运算符重载?

       运算符重载是为了解决类对象之间的运算的,通常的运算符只用于算术运算,如常量int之间,因为编译器已经定义了;而一个类两个对象之间成员进行运算必须重新定义,让编译器在遇到对象运算时能按我们要求的进行运算,这就是运算符重载的意义,即重定义运算符,因此你可以看到,运算符重载就是为类对象服务的,那么两个对象的成员进行运算那必须先获得对象本身啦,所以运算符重载参数必须含有类指针或引用,这是主要...

游泳的鱼的专栏 9835

【北大核心-代码复现】基于 VMD-FFCM-iTransformer 光伏功率短期预测

【北大核心-代码复现】基于 VMD-FFCM-iTransformer 光伏功率短期预测

767

手把手教你学Simulink——光伏储能系统双向DC-AC逆变器恒功率控制(PQ控制)仿真

本文详细介绍了光伏储能系统中双向DC-AC逆变器的恒功率控制(PQ控制)仿真方法。主要内容包括:1)PQ控制原理及其在光伏满发和储能充放电中的应用;2)系统架构设计,重点推导了功率到dq电流的数学映射关系及电流内环控制算法;3)Simulink建模步骤,涵盖功率电路搭建、PLL设计、电流参考转换等关键环节;4)仿真结果分析,验证了系统在10kW光伏满发和-5kW储能充电模式下的稳态精度和动态切换性能;5)工程实践建议,包括数字控制延迟补偿、低电压穿越处理等实际问题解决方案。该指南为新能源并网系统的功率精准控

MHD0815的博客 425

C++:类的六个默认函数之一 —— 赋值重载

文章目录运算符重载概念赋值运算符重载要点总结 运算符重载概念 C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数名字为:关键字operator后面接需要重载的运算符符号。 函数原型:返回值类型 operator操作符(参数列表) 注意: 不能通过连接其他符号来创建新的操作符:比...

AngelDg的博客 2624

PCB板设置20H 原则理解

20H原则是PCB设计中抑制EMI辐射的关键方法,要求电源层比相邻地层内缩20倍介质厚度(20H)。在四层板中实现20H原则需采用S-G-P-S层叠结构,确保GND与PWR紧邻。具体步骤包括:确定GND-PWR间介质厚度H,计算20H值(通常80-120mil),并在设计软件中将电源层四周内缩20H,同时保持地层完整不内缩。注意避免常见误区,如混淆介质厚度、地层内缩等。该原则能有效限制边缘场辐射,降低EMI干扰,是四层板EMC设计的重要规范。

qq_37999850的博客 696

函数重载和运算符重载

函数重载和运算符重载,实现了常见的==运算符、=运算符、+、+=运算符,

crawer 1546

lwip-2.0.3

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

重载学习——函数重载与运算符重载

一枚小新,有问题欢迎共同探讨~

weixin_62377025的博客 2674

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

函数重载、运算符重载

函数重载、运算符重载1.函数重载2.运算符重载 1.函数重载 1.1函数重载的定义 函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同。 1.2使用场景 常用来处理实现功能类似数据类型不同的问题。 下面举例来说明一下重载函数的格式。 int Add(int left,int right){ return left + right; } double Add(double left, double right

weixin_45143303的博客 2018

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++ 重载运算符和重载函数

本文描述了函数重载和运算符重载的理解,案例,包括重载++自加运算符,

xiangxiao的博客 1193

函数重载和运算符重载的区别

函数重载与运算符重载对比摘要 函数重载和运算符重载是C++中两种不同的多态实现方式。函数重载允许在同一作用域内定义多个同名函数,通过参数列表区分(参数类型、数量或顺序不同)。运算符重载则是对已有运算符赋予新含义,使其支持自定义类型的操作。 关键区别包括: 参数数量:函数重载参数数量不限,运算符重载受原运算符操作数限制 可重载范围:函数重载适用于所有函数,运算符重载只能重载已有运算符 调用方式:函数重载显式调用,运算符重载可通过运算符符号或operator@形式调用 返回类型:函数重载不依赖返回类型区分,运算

铭哥不写bug的博客 2110

C++:运算符重载与类的赋值运算符重载函数

运算符重载

小青菜的博客 3288

C++运算符重载函数

如果C++的运算符都无法用于类对象,对于类对象不能直接进行赋值运算,算术运算,关系运算,逻辑运算和输入输出操作,那么,类和对象的应用将受到很大的限制,影响类和对象的使用。在声明my_string类时,对运算符 + , - , * , / 都进行了重载,那么,使用这个类的用户在编程的时候完全不用考虑这个运算符重载函数是怎么样实现的,放心大胆地直接使用这些运算符进行操作,显然十分方便。运算符重载的方法是定义一个“重载运算符的函数”,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。

LC的专栏 2609

c++重载运算符和重载函数

C++ 允许在同一作用域中的某个和指定多个定义,分别称为和。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个或时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为。

Programmersa的博客 1382

【C++基础】多种函数重载和运算符重载

多种函数重载和运算符重载

m0_63956046的博客 1802

函数重载/运算符重载

函数重载 函数名相同,但函数类型、参数类型及个数不完全相同。本质上还是不同的函数,只不过方便记忆。 int add(int a, int b) { return a+b; } double add(double a, double b) { return a+b; } int add(int a, int b, int c) { return a+b+c; } 多种构造函数均以类名为函数名(无参构造函数、有参构造函数、拷贝构造函数),但它们的参数不同,所以本质上也是函数重载。 运算

cuc_pyx技术小站 679

c++之重载运算符、重载函数

C++ 重载运算符和重载函数C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策...

半宛清愁的博客 3576
上一篇: C++ 求阶乘 四种方法
下一篇: 最大公约数 最小公倍数
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值