通过函数来实现复数相加

        在之前的的文章中介绍过函数重载,已经接触到重载(overloading)这个名词。所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新的功能。因此,同一个函数名就可以用来代表不同功能的函数,也就是一名多用
        运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大家都已习惯于用加法运算符"+"对整数、单精度数和双精度数进行加法运算,如5+8,5.8+3.67等,其实,计算机处理整数、单精度数和双精度数加法的操作方法是不同的,由于C++已经对运算符"+"进行了重载,使"+"能适用于int,float,double类型的不同的运算。
        又如,"<<"是C++的位运算中的位移运算符(左移),但在输出操作中又是与流对象cout配合使用的流插入运算符,">>"也是位移运算符(右移),但在输入操作中又是与流对象cin配合使用的流提取运算符。这就是运算符重载(operator overloading)。C++系统对"<<"和">>"进行了重载,用户在不同的场合下使用它们时,作用是不同的。对"<<"和">>"的重载处理是放在头文件stream中的。因此,如果要在程序中用"<<"和">>"作流插入运算符和流提取运算符,必须在本文件模块中包含头文件stream(当然还应当包括"using namespace std;")。
        现在要讨论的问题是:用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。譬如,能否用"+"号进行两个复数的相加。若有c1=(3+4i),c2=(5-10i),在数学中可以直接用"+"号实现c3=c1+c2,即将c1和c2的实部和虚部分别相加,c3=(3+5,(4-10)i)=(8,-6i)。但在C++中不能在程序中直接用运算符"+"对复数进行相加运算。用户必须自己设法实现复数相加。
        最容易想到的方法是:用户可以自己定义一个专门的函数来实现复数相加。

编写程序:

运行结果:

程序分析:
        在Complex类中声明一个complex_add函数,此函数在类外定义,其作用是将两个复数相加,在该函数体中定义一个Complex类对象c作为临时对象。其后的两个赋值语句相当于
        c.real=this->real+c2.real;

        c.imag=this->imag+c2.imag;
this是当前对象的指针。this->real也可以写成(*this).real。现在,在main函数中是通过对象c1调用complex_add函数的,因此,以上两个语句相当于
        c.real=c1.real+c2.real;
        c.imag=c1.imag+c2.imag;

注意函数的返回值是Complex类对象c的值。
        结果无疑是正确的,但调用方式不直观、太烦琐,使人感到很不方便。人们自然会想:能否也和整数的加法运算一样,直接用加号"+"来实现复数运算,如
        c3=c1+c2;
编译系统就会自动完成c1和c2两个复数相加的运算。如果能做到,就为对象的运算提供很大的方便。这就需要对运算符"+"进行重载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode复制文件:行号

File Line Reference 插件可以复制文件名加行号&#xff0c;还可以将选中函数名进行复制&#xff0c;比较方便 w alt y (Windows) , ctrl y (macOS)复制行号加文件名 alt u (Windows) or ctrl u (macOS)复制带有选定行号文件名&#xff0c;函数名需要选中才行 查找文件&…

若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)

参考文章&#xff0c;非常感谢大佬的分享 实现可高亮的输入框 — HighlightTextarea GitHub:highlight-textarea 可看作者上一篇文章 若依 ruoyi-vue SpringBoot聊天敏感词过滤sensitive-word&#xff08;一&#xff09; 效果图 审核时&#xff0c;输入框高亮敏感词&#xff…

变阻器的分类

变阻器作为用于调节电路中电阻值的电子元件&#xff0c;在电子电路中具有广泛的应用。根据不同的工作原理和结构形式&#xff0c;变阻器可以分为多种类型。以下是对变阻器分类的详细阐述&#xff1a; 一、按工作原理分类 电位器是一种通过滑动端位置调节电阻值的变阻器&#x…

C++中 Debug和Release的区别

在C/C编程领域&#xff0c;Debug和Release是两种截然不同的编译模式&#xff0c;它们分别服务于不同的开发阶段和目标。理解这两种模式的区别不仅对于提高开发效率至关重要&#xff0c;还直接影响到最终产品的性能和质量。本文将深入探讨C/C中Debug和Release模式的区别&#xf…

Noah-MP陆面生态水文模拟与多源遥感数据同化

陆面模型在生态水文研究中的地位和作用&#xff1b;熟悉模型的发展历程&#xff0c;常见模型及各自特点&#xff1b;理解Noah-MP模型的原理&#xff0c;掌握Noah-MP模型在单站和区域的模拟、模拟结果的输出和后续分析及可视化等方法&#xff1b;课程还将深入讲解数据同化的原理…

6-添加自定义命令和生成的文件

本文使用的示例代码见1-简单开始cmake实践-CSDN博客。 假设&#xff0c;出于本教程的目的&#xff0c;我们决定不使用平台log和exp函数&#xff0c;而是希望生成一个预先计算值的表&#xff0c;以便在mysqrt函数中使用。在本节中&#xff0c;我们将创建表作为构建过程的一部分&…

1区老牌神刊,仅37天录用!网友:“这审稿速度救了我一条命”!

关注GZH【欧亚科睿学术】&#xff0c;GET完整版2023JCR分区列表&#xff01; ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 期刊信息概况 【期刊类型】计算机科学类SCIE&EI 【出版社】ELSEVIER出版社 【期刊概况】IF&#xff1a;4.0-5.0&#xff0c;JCR1区&#xff0c;中科院3区…

用 Dockerfile 创建镜像的基本步骤有哪些?

使用 Dockerfile 创建镜像的基本步骤如下&#xff1a; 定义基础镜像 在 Dockerfile 的开头&#xff0c;使用 FROM 指令指定一个基础镜像。例如&#xff1a; FROM ubuntu:latest这表示基于最新的 Ubuntu 镜像来构建。 安装依赖和软件 使用 RUN 指令来执行命令&#xff0c;安装…

电脑文件xinput1_3.dll丢失要怎么修复win10?一键解决xinput1_3.dll丢失的方法

电脑文件xinput1_3.dll丢失要怎么修复win10&#xff1f;其实无论是哪种系统&#xff0c;是不是win10其修复方法都是大同小异&#xff0c;不过在修复xinput1_3.dll文件之前&#xff0c;首先我们要先了解这个xinput1_3.dll文件&#xff0c;只有了解了&#xff0c;那么才可以快速的…

奇瑞新能源车型EQ2在驾校领域的CAN总线数据应用

在当今这个快速发展的汽车时代&#xff0c;科技的进步不仅推动了汽车性能的提升&#xff0c;也为驾驶培训领域带来了革命性的变化。其中&#xff0c;奇瑞EQ2作为一款电动汽车&#xff0c;其在驾校领域的应用尤其值得关注&#xff0c;特别是其采用的CAN总线技术。CAN总线&#x…

【productj服务导出文件503问题】

设备服务只要导出文件&#xff0c;就报503&#xff0c;查看K8S发现服务重启 1. 复现问题1.1 问题复现频繁fullGC 宿主pod服务日志监控1.2 小内存复现 接口没啥问题&#xff0c;导出就会导致服务重启 1. 复现问题 当前uat环境配置&#xff1a; pod内存&#xff1a;2G JVM参数&a…

Python 利用pandas处理CSV文件(DataFrame的基础用法)

前面介绍过通过Python标准库中的CSV模块处理CSV文件&#xff1a; Python 利用CSV模块处理数据 相比CSV模块&#xff0c;pandas的功能更加强大&#xff0c;本文将简单介绍如何通过pandas来处理CSV文件。 文章目录 一、pandas简介二、用法示例2.1 读取CSV文件2.1.1 read_csv参数…

设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)

创建型模式 单例模式&#xff08;Singleton Pattern&#xff09; 单例模式&#xff08;Singleton Pattern&#xff09;在Java中的使用场景与在其他编程语言中类似&#xff0c;其主要目的是确保一个类只有一个实例&#xff0c;并提供一个全局的访问点。以下是单例模式的一些常…

现代化3D Web轻量引擎HOOPS Communicator:基于ESM的代码库转型!

HOOPS Communicator自2024.2.0版本起&#xff0c;向基于ECMAScript Modules (ESM)的系统迁移的决策和技术细节。文章分析了这一转型对代码组织、封装、依赖管理、性能以及与现代JavaScript开发实践兼容性的积极影响&#xff0c;并讨论了IIFE和UMD的兼容性支持。 引言 随着Jav…

聊聊springboot项目如何利用jmh来进行基准测试

前言 1、什么是JMH JMH&#xff08;Java Microbenchmark Harness&#xff09;是由OpenJDK团队开发的一个用于Java微基准测试工具套件&#xff0c;主要是基于方法层面的基准测试&#xff0c;精度可以达到纳秒级。它提供了一种标准、可靠且可重复的方式来衡量Java代码的性能&…

[kuangbin]基础dp

Max Sum Plus Plus 题目大意&#xff1a;从一串数组中挑选连续m段子数组&#xff0c;使得最后的sum最大。 思路&#xff1a;首先考虑开二维数组&#xff0c;那么动态转移方程为&#xff1a; dp[i][j]max(dp[i-1][k]a[j],dp[i][j-1]a[j]) 其中dp表示枚举到第 j 个数的时候&#…

【深度学习(42)】通过vscode使用anaconda的python环境

按ctrlshiftp&#xff0c;选择Python:Select Interpreter 选择anaconda下的python虚拟环境

Elasticsearch 高亮搜索结果:提升用户体验的关键技术

在构建搜索引擎或任何需要快速、准确信息检索的应用时&#xff0c;搜索结果的高亮显示是一项至关重要的功能。它不仅能够显著提升用户的搜索体验&#xff0c;还能帮助用户更快地定位到他们感兴趣的内容。Elasticsearch&#xff0c;作为当今最流行的开源搜索和分析引擎之一&…

【k8s安装redis】k8s环境无pvc的情况下安装redis哨兵集群

文章目录 简介一.条件及环境说明&#xff1a;二.需求说明&#xff1a;三.实现原理及说明四.详细步骤4.1.规划节点标签4.2.创建configmap配置4.3.创建三个statefulset和service headless配置4.4.创建哨兵deployment配置和service配置 五.安装说明 简介 k8s集群中搭建有状态的服务…

大模型备案全网最详细流程说明【附附件】

下图为最新的直至第五批深度合成服务算法备案信息的公告 根据目前公开的国内大模型算法备案统计来看&#xff0c;首批境内深度合成服务算法备案清单&#xff0c;总共通过了五批。 以第二批举例&#xff0c;境内深度合成服务算法备案清单&#xff0c;总共通过110家&…