C++ 运算符重载(Complex复数类)

news2024/11/19 3:24:36

Complex复数类

Complex.h

#ifndef COMPLEX_H
#define COMPLEX_H

#include <iostream>
using namespace std;

class Complex
{
private:
	double real = 0;    //复数的实部
	double imag = 0;    //复数的虚部
public:
	Complex() = default;	 	  /*无参构造*/
	Complex(double r);            /*转换构造*/
	Complex(double a, double b);  /*有参构造*/
	/*负号运算符*/
	Complex  operator - ();
	/*加法运算符*/
	friend Complex  operator + (const Complex& Z1 ,const Complex& Z2);
	/*+=运算符*/
	Complex& operator += (const Complex& Z2);
	/*相等运算符*/
	friend bool operator == (const Complex& Z1, const Complex& Z2);
	/*不相等运算符*/
	friend bool operator != (const Complex& Z1, const Complex& Z2);
	/*输出运算符*/
	friend ostream& operator << (ostream& output, const Complex& Z);
	/*输出运算符*/
	friend	istream& operator >>  (istream& input, const Complex& Z);
	Complex & operator ++();    /*前置自增运算符*/
	Complex  operator ++(int);  /*后置自增运算符*/
	/*函数调用运算符*/
	Complex & operator() (double a, double b);
	/*强制类型转换运算符*/
	explicit operator unsigned int() const;
};

#endif // !COMPLEX_H

Complex.c

#include "Complex.h"

Complex::Complex(double r) :real(r) {}
Complex::Complex(double a, double b) :real(a), imag(b){}
/*负号运算符*/
Complex  Complex::operator - ()
{
	Complex temp;
	temp.real = -real;
	temp.imag = -imag;
	return temp;
}
/*加法运算符*/
Complex operator + (const Complex& Z1, const Complex& Z2)
{
	Complex temp;
	temp.real = Z1.real + Z2.real;
	temp.imag =  Z1.imag + Z2.imag;
	return temp;
}
/*+=运算符*/
Complex& Complex::operator += (const Complex& Z2)
{
	real += Z2.real;
	imag += Z2.imag;
	return *this;
}
/*相等运算符*/
bool operator == (const Complex& Z1, const Complex& Z2)
{
	if (Z1.real == Z2.real && Z1.imag == Z2.imag)
		return true;
	else
		return false;
}
/*不相等运算符*/
bool operator != (const Complex& Z1, const Complex& Z2)
{
	if (Z1.real == Z2.real && Z1.imag == Z2.imag)
		return false;
	else
		return true;
}
/*输出运算符*/
ostream& operator << (ostream& output, const Complex& Z)
{
	output << Z.real << " + " << Z.imag << 'i';
	return output;
}
/*输入运算符*/
istream& operator >> (istream& input, const Complex& Z)
{
	input >> Z.real >> Z.imag;
	return input;
}
/*前置自增运算符重载*/
Complex & Complex::operator ++()
{
	real += 1;
	imag += 1;
	return *this;
}
/*后置自增运算符重载*/
Complex Complex::operator ++(int)
{
	Complex temp;
	temp.real = real;
	temp.imag = imag;
	real += 1;
	imag += 1;
	return temp;
}

/*函数调用运算符*/
Complex& Complex::operator() (double a, double b)
{
	real = a;
	imag = b;
	return *this;
}
/*强制类型转换运算符*/
Complex::operator unsigned int() const
{
	return real;
}

main.c

#include "Complex.h"
#include "Shape.h"

#include <iostream>
using namespace std;

void Complex_Test(void)
{
	Complex Z;   /*无参构造*/
	Z(1, 1); 	/*函数调用运算符*/
	cout << Z << endl;
	cout << (unsigned int)Z << endl; 	/*强制类型转换运算符*/
	Complex Z3{12};   /*转换构造*/
	cout << Z3 << endl;
	Complex Z1{ 3,4 };  /*有参构造*/
	cout << "Z1 = " << Z1 << endl;
	Complex Z2{ 2,1 };  /*有参构造*/
	cout << "Z2 = " << Z2 << endl;
	Z = -Z1;
	cout << "-Z1 = " << Z << endl;
	Z = Z1 + Z2;
	cout << "Z1+Z2 = " << Z << endl;
	Z += {2, 2};
	cout << "Z+{2,2} = " << Z << endl;
	Z = Z1++;
	cout << "Z1++ = " << Z << endl;
	Z = ++Z2;
	cout << "++Z2 = " << Z << endl;
	if (Z1 != Z2)
		cout << "不相等" << endl;
	else
		cout << "相等" << endl;
}
int main(void)
{
  	Complex_Test();
	return 0;
}

结果:

Complex

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

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

相关文章

No186.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

解决XFCE桌面VirtualBox透明背景的问题

1 背景 笔者用的是ManjaroXFCE的组合&#xff0c;但是在使用VirtualBox时&#xff0c;会出现透明背景的问题&#xff1a; 然后发现这其实和Kvantum主题有关。下面将进行设置操作&#xff0c;去修正Kvantum相关配置修复该问题。 2 操作流程 打开Kvantum Manager&#xff1a; …

No184.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

Django中如何创建表关系,请求生命周期流程图

Django中ORM创建表关系 如何创建表关系(一对一 &#xff0c; 一对多 &#xff0c; 多对多) 图书表&#xff0c;出版社表&#xff0c;作者表&#xff0c;作者详情表 换位思考法判断表关系 图书表和出版社表 >>> 一对多 >>> 图书表是多&#xff0c;出…

数据挖掘:关联规则,异常检测,挖掘的标准流程,评估指标,误差,聚类,决策树

数据挖掘&#xff1a;关联规则 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c;尤其sql要…

混合A Star算法

混合A Star算法就是将A*与Lattice Graph相关联。 使用栅格地图&#xff0c;保持在栅格地图的这个节点方格里都只记录一个机器人的State&#xff0c;例如图上的弯弯的线&#xff0c;进行剪枝&#xff0c;看一个节点的Cost&#xff08;时间、消耗的能量、路径的长度、终端状态惩…

​软考-高级-系统架构设计师教程(清华第2版)【第3章 信息系统基础知识(p120~159)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第3章 信息系统基础知识(p120~159)-思维导图】 课本里章节里所有蓝色字体的思维导图

无需公网IP,贝锐花生壳内网穿透远程访问NAS

群晖DSM 7.0及以上版本 1.1 安装运行花生壳套件 &#xff08;1&#xff09;通过浏览器输入群晖NAS的内网地址&#xff0c;登录进去后&#xff0c;点击【套件中心】&#xff0c;搜索【花生壳】&#xff0c;并点击【安装套件】&#xff1b; &#xff08;2&#xff09; 勾选我接…

git命令汇总

1.git是基于ssh的代码管理工具,所以在git使用之前需要配置好ssh ssh配置教程 2.先创建仓库 3. git init在目标的git目录下创建仓库 4.git add .(或者写文件名) 5.git commit -m "标记信息" 持久化 6.git remote add origin gitgit.acwing.com:yaoaolong/11_5.git初次…

异步编程工具Promise与Async/Await:解决前端开发中的嵌套回调地狱

文章目录 Promise&#xff1a;处理异步操作的基本工具Promise.all async/await&#xff1a;更简洁的异步编程方式Promise与async/await的比较结论 当谈及JavaScript中的异步编程时&#xff0c;两个非常常见且强大的工具是Promise和async/await。在本文中&#xff0c;我们将以实…

CNN入门实战:猫狗分类

前言 CNN&#xff08;Convolutional Neural Network&#xff0c;卷积神经网络&#xff09;是一种深度学习模型&#xff0c;特别适用于处理图像数据。它通过多层卷积和池化层来提取图像的特征&#xff0c;并通过全连接层进行分类或回归等任务。CNN在图像识别、目标检测、图像分割…

ubuntu下tensorrt环境配置

文章目录 一、Ubuntu18.04环境配置1.1 安装工具链和opencv1.2 安装Nvidia相关库1.2.1 安装Nvidia显卡驱动1.2.2 安装 cuda11.31.2.3 安装 cudnn8.21.2.4 下载 tensorrt8.4.2.4 二、编写CMakeLists.txt三、TensorRT系列教程 一、Ubuntu18.04环境配置 教程同样适用与ubuntu22.04…

springcloud电影购票选座网站系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 用户端&#xff1a; 登录注册 首页显示搜索电影&#xff0c;轮播图&#xff0c;电影分类&#xff0c;最近上架电影&#xff08;可…

Linux 内核启动流程

目录 链接脚本vmlinux.ldsLinux 内核启动流程分析Linux 内核入口stext__mmap_switched 函数start_kernel 函数rest_init 函数init 进程 看完Linux 内核的顶层 Makefile 以后再来看 Linux 内核的大致启动流程&#xff0c;Linux 内核的启动流程要比uboot 复杂的多&#xff0c;涉及…

第六章 DNS域名解析服务器

1、DNS简介 DNS&#xff08;Domain Name System&#xff09;是互联网上的一项服务&#xff0c;它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网。 DNS系统使用的是网络的查询&#xff0c;那么自然需要有监听的port。DNS使用的是53端口…

思科9300交换机使用USB进行升级ISO

一、下载ISO 一、网址 Software Download - Cisco Systems 二、找到型号 四、选择XE 软件 五、进行下载 二、COPY 进 U盘 一、、请注意&#xff01;如果你的U盘不是Fat32文件格式则交换机读取不了&#xff0c;请先格式化再复制文件。 二、下载后将 bin文件复制到U盘。 1.扩展…

js删除json数据中指定元素

delete 删除数组方法&#xff1a; function removeJSONRows() {var tab {"dataRows": [{"id": 1,"name": "使用部门"},{"id": 2,"name": "车辆走行路线"},{"id": 3,"name": &quo…

【Redis】String字符串类型

上一篇&#xff1a;Redis-key的使用 https://blog.csdn.net/m0_67930426/article/details/134361821?spm1001 .2014.3001.5501 目录 appen (附加&#xff09; strlen(获取字符串的长度&#xff09; incr decr getRange(获取字符串&#xff09; setRange&#xff08;替…

C语言--求一个 3 X 3 的整型矩阵对角线元素之和

一.题目描述 求一个 3 X 3 的整型矩阵对角线元素之和 二.代码实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() {int arr[3][3] { 0 };for (int i 0;i < 3;i){for (int j 0;j < 3;j){ printf("请输入数字&#xff1a;");scanf(&…

卸载本地开发环境,拥抱容器化开发

以前在公司的时候&#xff0c;使用同事准备的容器化环境&#xff0c;直接在 Docker 内进行开发&#xff0c;爽歪歪呀。也是在那时了解了容器化开发的知识&#xff0c;可惜了&#xff0c;现在用不到那种环境了。所以打算自己在本地也整一个个人的开发环境&#xff0c;不过因为我…