C++实现复数类

2023-11-19

主要还是练习封装,做一个demo。下一步会实现string类。

# include <iostream>
using namespace std;
class my_complex {
private:
	int real;
	int imag;
public:
	my_complex();
	my_complex(int real, int imag);
	~my_complex();
	my_complex(const my_complex& rhs);
	my_complex& operator=(const my_complex& rhs);
	my_complex& operator+(const my_complex& rhs);
	bool operator==(const my_complex& rhs);
	friend ostream &operator<<(ostream& output, const my_complex &rhs);
};
my_complex::my_complex() :
	real(0), imag(0) {
}
my_complex::my_complex(int real, int imag) :
	real(real), imag(imag) {
}
my_complex::my_complex(const my_complex& rhs) {
	real = rhs.real;
	imag = rhs.imag;
}
my_complex& my_complex::operator +(const my_complex& rhs) {
	real = rhs.real + real;
	imag = rhs.imag + imag;
	return *this;
}
//需要处理自我赋值(还好,因为这里没有动态内存的分配)
my_complex& my_complex::operator =(const my_complex& lhs) {
	real = lhs.real;
	imag = lhs.imag;
	return *this;
}
bool my_complex::operator ==(const my_complex& rhs) {
	return real == rhs.real && imag == rhs.imag;
}
my_complex::~my_complex() {

}
ostream& operator<<(ostream& output, const my_complex &rhs) {
	output << rhs.real;
	if (rhs.imag > 0) {
		std::cout << "+";
	}
	std::cout << rhs.imag << "i";
	return output;
}
int main() {
	my_complex c1(1, 5);
	my_complex c2(c1); //等价于 my_complex c2 = c1;
	my_complex c3(2, 3);
	bool flag(c1 == c2);
	c1 = c1 + c2;
	cout << c1 << endl;
	cout << c2 << endl;
	cout << c3 << endl;
	cout << flag << endl;
}
虽然简单,但是还是有收获,如下:
(1)第一次在程序中有意使用了友元函数,原来用友元函数的好处不少,最直观的一点就是在重载<<的时候,我根本不用提供public的getReal和getImag,因为友元函数对于类内部的访问权限和成员函数一样。

(2)有意识的熟悉了重载运算符

(3)赋值函数一定要注意判断自我赋值

测试结果:

2+10i
1+5i
2+3i
1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++实现复数类 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 重载<<的返回值

    include
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现

随机推荐

  • CentOS 7查看磁盘空间

    CentOS如何查看硬盘大小 CentOS是一种基于Linux的操作系统 主要用于服务器端应用 在服务器管理中 硬盘大小是一个非常重要的指标 查看硬盘大小可以帮助系统管理员有效地管理硬盘空间和避免硬盘满了的情况 方法一 使用df命令 df命
  • Unity 用脚本操作常用UI控件(上)

    控件介绍 在界面系统的术语中 将一个具有独立状态 外观和操作的对象称为控件 例如 常用的交互控件有按钮 输入框 滑动条等 常见的非交互式控件有文本标签 图片等 Unity采用了父子物体和组件的设计思想 其每个界面控件 往往也是由游戏物体挂载
  • 虚拟内存的最大容量与实际容量区别

    虚拟内存的最大容量与实际容量区别 1 概念介绍 虚拟内存的最大容量是计算机的地址结构 CPU寻址范围决定的 虚拟内存的实际容量是内存与外存之和 CPU寻址范围 两者的最小值 2 例题介绍 某计算机的地址结构是64位 按字节编址 内存大小51
  • 找准边界,吃定安全

    潜在的网络威胁 网络安全挑战层出不穷 如何确保网络安全 山石云 景赋能中小企业安全运营 让安全更有效 找准边界 吃定安全 往期文章 从访问控制谈起 再看零信任模型 威胁情报加持 泛边界下的全局主动防御体系如何着手 流量剧增 看山石网科如何打
  • UWB与蓝牙AOA定位技术简要对比

    1 UWB基本原理 UWB 超宽带技术 是基于IEEE802 15 4a z标准的利用纳秒级窄脉冲进行数据传输的无线通信技术 主要服务于微位置 micro location a person s placement to within a
  • java中如何将Long类型转为Integer类型

    注意不能直接在前面加个 int 而是 将Long型转换为int型 这里的Long型是包装类型 Long a 10 int b a intValue 即long intValue
  • Hx711调试过程

    1 体重板子最开始出现的问题 无法下载程序 指示灯不亮 解决办法 检查电源复位晶振 发现晶振还有 boot键坏了 2 问题 下载进程序以后 板子通过串口发到电脑上的数据不变 解决办法 先是查了关于HX711的各种资料 了解到 HX711芯片
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • MFC中操作Word文档

    首先我们需要导入word类库 电脑上需要安装了word 左击项目 点击类向导 添加类 C 选择类型库中的MFC类 本文章案例可点击下载 然后选择文件 位置选择从office安装目录中找到MSWORD OLB文件 然后点击 gt gt 添加所
  • 源码探索-ArrayList

    ArrayList 继承与实现关系 数组的相关属性 ArrayList底层是一个Object 数组 既然是数组 那么底层的工具类大多是会用到Arrays工具类去实现 函数探索 来看看构造函数 有三个构造函数 分别对应不同的生成内容 来看看添
  • linux 2.6.30 内核编译 提示 ‘make[1]: *** [arch/x86/vdso/vdso.so.dbg] Error 1’ 错误

    linux 2 6 30 编译出现如下错误 解决方案 打开 linux 2 6 30 arch x86 vdso Makefile 文件 1 修改28行 将 m elf x86 64 修改为 m64 2 修改72行 将 m elf i386
  • 语音识别学习记录 [再谈频率混叠(定量分析、离散采样后频谱的周期延拓)]

    前几天在语音识别学习记录 传说中的频率混叠和Nyquist定理 定性理解 中简单理解了一下频率混叠的原因 但是也发现了很多不明白的问题 1 为什么信号经过傅里叶变换后在频域是关于y轴对称的 这个问题的回答已经写在语音识别学习记录 信号经傅里
  • vue的指令

    Vue 的指令 一 Vue 的指令 1 指令的概念 指令 Directives 是 vue 为开发者提供的模板语法 用于辅助开发者渲染页面的基本结构 vue 中的指令按照不同的用途可以分为如下 6 大类 内容渲染指令 属性绑定指令 事件绑定
  • SQL 查询指定行数的数据。

    今天遇到一个关于 查询指定行数的数据 的sql查询语句问题 突然发现以前没怎么接触过 刚才想起来了 赶紧看了下文档 又上网搜了下 有了下面的东西 不知道有没有什么地方不对 oracle 先看一下文档中关于any和all的例子 很不错噢 An
  • Pytorch 深度强化学习模型训练速度慢

    最近一直在用Pytorch来训练深度强化学习模型 但是速度一直很慢 Gpu利用率也很低 一 起初开始在训练参数 batch size 200 graph size 40 epoch size 100000 训练速度一个epoch要4h 人麻
  • node学习openai库入门及使用(一)

    第一章 node学习openai库入门及使用 一 文章目录 第一章 node学习openai库入门及使用 一 前言 一 node js的openai库是什么 二 使用步骤 1 引入库 2 发送请求 总结 前言 众所周知 目前chatgpt已
  • cuda8.0使用nvcc编译程序出现warning:The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated的解决办法

    初学CUDA 使用的NVIDIA显卡是Tesla K80 安装的是cuda8 0 写了一个简单的测试程序 使用nvcc编译 指令如下 nvcc cudaPrintDeviceInfo cu o cudaPrintDeviceInfo 本以为
  • docker快速学习--docker compose服务编排--06

    一 服务编排 1 1 概念 按照一定的业务规则批量管理容器 1 3 问题 微服务架构的应用系统中一般包含若干个微服务 每个微服务一般都会部署多个实例 如果每个微服务都要手动启停 维护的工作量会很大 1 要从Dockerfile build
  • go踩坑——no required module provides package go.mod file not found in current directory or any parent

    背景 准备运行下面代码 package main import github com gin gonic gin func main 创建一个默认的路由引擎 r gin Default GET 请求方式 hello 请求的路径 当客户端以G
  • C++实现复数类

    主要还是练习封装 做一个demo 下一步会实现string类 include