我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++怎么实现一个复数类

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++怎么实现一个复数类

这篇文章主要介绍了C++怎么实现一个复数类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

要求

实现⼀个复数类 ComplexComplex 类包括两个 double 类型的成员 realimage ,分别表示复数的实部和虚部。

Complex 类,重载其流提取、流插⼊运算符,以及加减乘除四则运算运算符。

重载流提取运算符 >> ,使之可以读⼊以下格式的输⼊(两个数值之间使⽤空⽩分隔),将第⼀个数值存为复数的实部,将第⼆个数值存为复数的虚部:

 -1.1 2.0 +0 -4.5

重载流插⼊运算符 << ,使之可以将复数输出为如下的格式⸺实部如果是⾮负数,则不输出符号位;输出时要包含半⻆左右⼩括号

(-1.1+2.0i) (0-4.5i)

每次输⼊两个复数,每个复数均包括由空格分隔的两个浮点数,输⼊第⼀个复数后,键⼊回⻋,然后继续输⼊第⼆个复数。

输出两个复数,每个复数占⼀⾏;复数是由⼩括号包围的形如 (a+bi) 的格式。注意不能输出全⻆括号

样例输⼊

-1.1 2.0 0 -4.5

样例输出

(-1.1+2i) (0-4.5i)(-1.1-2.5i)(-1.1+6.5i)(9+4.95i)(-0.444444-0.244444i)

提示

需要注意,复数的四则运算定义如下所示:

加法法则: ( a + b i ) + ( c + d i ) = ( a + c ) + ( b + d ) i (a + bi) + (c + di) = (a + c) + (b + d)i (a+bi)+(c+di)=(a+c)+(b+d)i减法法则: ( a + b i ) − ( c + d i ) = ( a − c ) + ( b − d ) i (a + bi) − (c + di) = (a − c) + (b − d)i (a+bi)−(c+di)=(a−c)+(b−d)i乘法法则: ( a + b i ) × ( c + d i ) = ( a c − b d ) + ( b c + a d ) i (a + bi) × (c + di) = (ac − bd) + (bc + ad)i (a+bi)×(c+di)=(ac−bd)+(bc+ad)i除法法则: ( a + b i ) ÷ ( c + d i ) = [ ( a c + b d ) / ( c 2 + d 2 ) ] + [ ( b c − a d ) / ( c 2 + d 2 ) ] i (a + bi) ÷ (c + di) = [(ac + bd)/(c^2 + d^2 )] + [(bc − ad)/(c^2 + d^2)]i (a+bi)÷(c+di)=[(ac+bd)/(c2+d2)]+[(bc−ad)/(c2+d2)]i

两个流操作运算符必须重载为 Complex 类的友元函数

此外,在输出的时候,你需要判断复数的虚部是否⾮负⸺例如输⼊ 3 1.0 ,那么输出应该为 3+1.0i 。这⾥向⼤家提供⼀种可能的处理⽅法:使⽤ ostream 提供的 setf() 函数 ⸺它可以设置数值输出的时候是否携带标志位。例如,对于以下代码:

ostream os;os.setf(std::ios::showpos);os << 12;

输出内容会是 +12

⽽如果想要取消前⾯的正号输出的话,你可以再执⾏:

os.unsetf(std::ios::showpos);

即可恢复默认的设置(不输出额外的正号)

代码实现

#include <iostream>using namespace std;const double EPISON = 1e-7;class Complex{private:  double real;  double image;public:  Complex(const Complex& complex) :real{ complex.real }, image{ complex.image } {  }  Complex(double Real=0, double Image=0) :real{ Real }, image{ Image } {  }  //TODO    Complex operator+(const Complex c) {        return Complex(this->real + c.real, this->image + c.image);    }        Complex operator-(const Complex c) {        return Complex(this->real - c.real, this->image - c.image);    }        Complex operator*(const Complex c) {        double _real = this->real * c.real - this->image * c.image;        double _image = this->image * c.real + this->real * c.image;        return Complex(_real, _image);    }        Complex operator/(const Complex c) {        double _real = (this->real * c.real + this->image * c.image) / (c.real * c.real + c.image * c.image);        double _image = (this->image * c.real - this->real * c.image) / (c.real * c.real + c.image * c.image);        return Complex(_real, _image);    }    friend istream &operator>>(istream &in, Complex &c);    friend ostream &operator<<(ostream &out, const Complex &c);};//重载>>istream &operator>>(istream &in, Complex &c) {    in >> c.real >> c.image;    return in;}//重载<<ostream &operator<<(ostream &out, const Complex &c) {    out << "(";    //判断实部是否为正数或0    if (c.real >= EPISON || (c.real < EPISON && c.real > -EPISON)) out.unsetf(std::ios::showpos);    out << c.real;    out.setf(std::ios::showpos);    out << c.image;    out << "i)";    return out;}int main() {  Complex z1, z2;  cin >> z1;  cin >> z2;  cout << z1 << " " << z2 << endl;  cout << z1 + z2 << endl;  cout << z1 - z2 << endl;  cout << z1*z2 << endl;  cout << z1 / z2 << endl;  return 0;}

感谢你能够认真阅读完这篇文章,希望小编分享的“C++怎么实现一个复数类”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++怎么实现一个复数类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++怎么实现一个复数类

这篇文章主要介绍了C++怎么实现一个复数类,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。要求实现⼀个复数类 Complex 。 Complex 类包括两个 double 类型
2023-06-14

C#中怎么实现一个数据库操作类

这期内容当中小编将会给大家带来有关C#中怎么实现一个数据库操作类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#数据库操作类主要包括两类方法:一类用来直接执行SQL语句,另一类用来执行存储过程。其中的数
2023-06-17

怎么利用C++实现一个反射类

这篇文章主要讲解了“怎么利用C++实现一个反射类”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用C++实现一个反射类”吧!代码环境为VScode + CMake + GCC 8.1.0
2023-07-05

C#中怎么利用类实现一个接口

这篇文章给大家介绍C#中怎么利用类实现一个接口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#类实现接口前面我们已经说过,接口定义不包括方法的实现部分。接口可以通过类或结构来实现。我们主要讲述通过类来实现接口。用类来
2023-06-17

C#中怎么实现一个动态数组

C#中怎么实现一个动态数组,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.数组的容量是固定的,但ArrayList的容量可以根据需要自动扩充。当我们修改了ArrayLis
2023-06-17

C#中怎么实现一个取整函数

本篇文章为大家展示了C#中怎么实现一个取整函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C#取整函数使用实例:Math.Round是"就近舍入",当要舍入的是5时与"四舍五入"不同(取偶数),如
2023-06-17

C#中怎么实现一个回调函数

C#中怎么实现一个回调函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是C#回调函数?C#回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于
2023-06-18

C++中怎么实现一个LeetCode

这篇文章给大家介绍C++中怎么实现一个LeetCode,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。[LeetCode] 128.Longest Consecutive Sequence 求最长连续序列Given an
2023-06-20

c++怎么创建一个类

在C++中,可以通过以下步骤来创建一个类:1. 声明类:在头文件(.h或.hpp)中声明类的名称和成员函数。例如:```cppclass MyClass {// 成员变量private:int myInt;// 成员函数public:voi
2023-08-16

c#怎么添加一个类

c# 中添加类的步骤如下:创建新解决方案并添加类模板。编写类定义,包括类名、访问修饰符和成员。使用该类并创建其实例。C# 中添加类的步骤1. 创建一个新解决方案打开 Visual Studio。从菜单中选择“文件”->“新建”->“项目
c#怎么添加一个类
2024-05-12

C#中怎么实现一个数值字符串

本篇文章给大家分享的是有关C#中怎么实现一个数值字符串,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#数值字符串首先,我们得搞明白,什么是数值字符串。我们知道,在 C# 中,
2023-06-17

在c#中怎么定义一个类数组

类数组是用于存储相同类型对象的容器,在 c# 中可以使用以下语法进行定义:类名[] 数组名。在定义后,可以通过在声明时或声明后初始化数组。数组中的元素可以通过索引器或 for 循环进行访问。不过,要注意的是,类数组是引用类型,数组大小是固定
在c#中怎么定义一个类数组
2024-05-14

C++中怎么实现一个接口

C++中怎么实现一个接口,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。定理1:C++接口是依赖的终点。接口不需要依赖任何东西。推论1:依赖C++接口是安全的。不会带来更多的
2023-06-17

c#继承多个基类怎么实现

在 c# 中,实现多重继承的方法是通过使用接口。一个类可以实现多个接口,从而继承来自不同基类的行为。需要注意的是,当接口定义了具有相同签名的相同方法时,需要使用显式实现来解决继承冲突(钻石问题)。C# 中实现多重继承的方法在 C# 中,一
c#继承多个基类怎么实现
2024-05-14

C#中怎么实现一个随机数发生器

C#中怎么实现一个随机数发生器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。***种方法不指定随机种子,系统自动选取当前时间作为随机种子:Random ro = new R
2023-06-18

C++中怎么实现一个多线程计数器

C++中怎么实现一个多线程计数器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。以计数器实现为例子,演示了多线程计数器的实现技术方法,代码如下://目的: 测试利
2023-06-17

PHP中怎么实现一个上传类

PHP中怎么实现一个上传类,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录