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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

今起不再“没完没了的接龙斗嘴”

今天本“人民体验官”推广人民日报官方微博&#xff08;转央视网&#xff09;的文化产品《数字减负不能比减脂还难》。 截图&#xff1a;来源“人民体验官”推广平台 在时下的一些网络自媒体平台之上&#xff0c;的确存在“越拉越多的群&#xff0c;没完没了的接龙&#xff0c…

微信支付平台C#SDK_微信支付.net SDK

一、微信支付平台C# SDK V3 https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat/blob/main/docs/WechatTenpayV3 接口对应整理&#xff1a; https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat/blob/main/docs/WechatTenpayV3/Basic_Mod…

计算机网络技术(一)

深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网&#xff08;互联网&#xff09;与因特网的区别与关系 如图所示&#xff0…

Pinia 状态管理器 菠萝:Setup Store风格

Pinia介绍&#xff1a; Pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或页面共享状态。 Pinia 大小只有 1kb 左右&#xff0c;超轻量级&#xff0c;你甚至可能忘记它的存在&#xff01; 相比 Vuex,Pinia 的优点&#xff1a; 更贴合 Vue 3 的 Composition API 风…

Android修行手册 - 可变参数中星号什么作用(冷知识)

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

Halcon WPF 开发学习笔记(2):Halcon导出c#脚本和WPF初步开发

文章目录 前言HalconC#教学简单说明如何二开机器视觉如何二次开发Halcon导出Halcon脚本新建WPF项目&#xff0c;导入Halcon脚本和Halcon命名空间 前言 我目前搜了一下我了解的机器视觉软件&#xff0c;有如下特点 优点缺点兼容性教学视频(B站前三播放量)OpenCV开源&#xff0…

TCSVT(IEEE Transactions on Circuits and Systems for Video Technology)期刊投稿指南

目录 TCSVT 期刊简介 TCSVT 期刊影响因子和分区​ 期刊官方网站 期刊投稿网址 投稿指南网址 稿件格式要求 稿件提交指南 A. 提交稿件 B. 手稿格式 C. 摘要指南 D. 提交图形的指南 E. 页面和彩色图形费用 TCSVT 期刊简介 IEEE Transactions on Circuits and Systems…

产品化的GPT,能否为“百模大战”照亮未来?

这两天&#xff0c;AI圈都处在一种莫名的震撼感当中。 北京时间 11月7日&#xff0c;OpenAI 举办了首次DevDay开发者日活动。活动现场发布了非常多内容&#xff0c;其中有一些按部就班的&#xff0c;比如技术上更新了最新版本的GPT-4 Turbo。也有一些让从业者目瞪口呆&#xff…

C语言数据结构-----双向链表增删查改的代码实现

文章目录 1.初始化双链表2.创建链表节点3.打印链表4.尾插5.尾删6.头插7.头删8.在pos之前插入8.1 在pos之前插入(改造头插)8.2 在pos之前插入(改造尾插) 9.删除pos位置9.1 删除pos位置(改造尾删)9.1 删除pos位置(改造头删) 10.查找11.毁灭 链接: 顺序表(动态顺序表增删查改的代码…

openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库

文章目录 openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库121.1 连接密态数据库121.2 调用isValid方法刷新缓存示例121.3 执行密态等值查询相关的创建密钥语句121.4 执行密态等值查询相关的创建加密表的语句121.5 执行加密表的预编译SQL语…

系列八、Mybatis一对多查询,只查询出了一条记录

一、Mybatis一对多查询&#xff0c;只查询出了一条记录 1.1、问题说明 典型的权限管理框架的数据库表中&#xff0c;一般会存在这样3种角色的表&#xff0c;即用户表、角色表、用户角色关联表&#xff0c;表设计好之后&#xff0c;往这三张表中初始化了一些测试数据&#xff0…

stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)及stm32智能小车超声波测距代码(C语言版本)

首先要说明一下原理&#xff1a;使用stm32无法准确产生1us的时间&#xff0c;但是超声波测距一定要依赖时间&#xff0c;时间不准&#xff0c;距离一定不准&#xff0c;这是要肯定的&#xff0c;但是在不准确的情况下&#xff0c;要测量一个比较准确的时间&#xff0c;那么只能…

混沌系统在图像加密中的应用(基于哈密顿能量函数的混沌系统构造1.3)

混沌系统在图像加密中的应用&#xff08;基于哈密顿能量函数的混沌系统构造1.3&#xff09; 前言一类三维非哈密顿系统的构造与动态特性分析1.相关理论基础2.类Nos-Hoove系统构造的思路及实现3.基于哈密顿能量理论的Nos-Hoove系统的分析与仿真3.1 平衡点分析3.2 不同强度激励下…

C语言从入门到精通之【数据类型和关键字】

数据类型在程序使用之前已经预先设定好了&#xff0c;在整个程序的运行过程中没有变化&#xff0c;这些称为常量&#xff08;constant&#xff09;。其他数据类型在程序运行期间可能会改变或被赋值&#xff0c;这些称为变量&#xff08;variable&#xff09;。 变量类型有几种…

(二十七)ATP应用测试平台——基于mybatisplus和aop切面实现数据权限隔离的案例实战

前言 在实际项目开发中&#xff0c;我们经常会用到俩种权限&#xff0c;一种是功能权限&#xff0c;一种是数据权限。功能权限主要是用来限制用户的操作&#xff0c;而数据权限是限制用户能查看到哪些数据。功能权限我们可以使用流行的框架shiro或者spring-security实现&#…

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(&…

暴力递归转动态规划(十五)

题目 给定一个正数n&#xff0c;求n的裂开方法数&#xff0c; 规定&#xff1a;后面的数不能比前面的数小 比如4的裂开方法有&#xff1a; 1111、112、13、22、04 。 5种&#xff0c;所以返回5 暴力递归 用暴力递归方法进行尝试&#xff0c;整体思路是这样&#xff1a; 暴力递…

RcppRcppEigen学习材料推荐

目录 一Rcpp和RcppEigen包 二Rcpp学习材料来源 三Rcpp&RcppEigen学习材料汇总 一Rcpp和RcppEigen包 目前已有RcppEigen包&#xff0c;因此直接下载安装RcppEigen包即可&#xff0c;不需要在Eigen官网下载安装。即不需要安装任何关于C的软件&#xff0c;直接基于R进行C相…

Java入门篇 之 补 类与对象

本篇碎碎念&#xff1a;每个人的想法都不一样&#xff0c;不要强求&#xff0c;顺其自然&#xff0c;要相信&#xff0c;一切都在向好的方面前进&#xff01;&#xff01;&#xff01;&#xff01; 今日份励志文案:山海的浩瀚&#xff0c;宇宙的浪漫&#xff0c;都在我内心翻腾…

【编程语言发展史】Python的起源和发展历史

目录 Python的起源 Python的发展历史 Python的生态系统和应用领域 Python的社区和发展模式 Python的未来趋势和挑战 Python是一门广受欢迎的高级编程语言&#xff0c;其起源和发展历史自20世纪末至今&#xff0c;经历了多个版本的迭代和社区的广泛参与。以下是关于Python的…