要求

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

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

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

 -1.1 2.0+0 -4.5

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

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

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

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

样例输⼊

-1.1 2.00 -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 } {}//TODOComplex 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 << "(";//判断实部是否为正数或0if (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++ 实现一个复数类相关推荐

  1. 定义一个复数类Complex,重载运算符+

    定义一个复数类Complex,重载运算符"+".使之能用于复数的加法运算,将运算符函数重载为非成员.非友员的普通函数.编写程序求2个复数之和. #include<iostre ...

  2. 定义一个复数类Complex,重载运算符“+”,

    定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.参加运算的两个运算符可以都是类对象.也可以其中一个是整数,顺序任意.例如:c1+c2,i+c1,c1+i ...

  3. 1、定义一个复数类Complex,使得下面的代码能够工作。 Complex c1(3,5); Complex c2=4.5; c1.add(c2); c1.show();

    一.问题描述 1.定义一个复数类Complex,使得下面的代码能够工作. Complex c1(3,5); Complex c2=4.5; c1.add(c2); c1.show(); #includ ...

  4. 建立一个复数类Complex,其私有数据成员mX和mY表示复数的实部和虚部,构造函数Complex用于对复数的实部和虚部初始化

    建立一个复数类Complex,其私有数据成员mX和mY表示复数的实部和虚部,构造函数Complex用于对复数的实部和虚部初始化,友员函数Add,Sub,Mul和Div分别用于进行复数的加.减.乘和除法 ...

  5. 定义一个复数类Complex,重载运算符“+”,“ -”,“*”,“/”使之能用于计算两个复数的加减乘除。

    定义一个复数类Complex,重载运算符"+"," -","*","/"使之能用于计算两个复数的加减乘除.运算符重载函数 ...

  6. 定义一个复数类Complex

    3. 定义一个复数类 Complex ,使得代码能够进行下面的工作 (20 分 ) : Complex c1(3, 5); // 用复数 3+5i 初始化 c1 Complex c2 = 4.5; / ...

  7. python定义一个复数类complex、并实现复数相加_用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加、减运算...

    题目: 用java定义一个复数类Complex,能够创建复数对象,并且实现复数之间的加.减运算 复数具有实部和虚部两部分,如2+5i就是一个复数,其中2为实部,5i为虚部;两复数相加时,实部与实部相加 ...

  8. java构造实部与虚部,1.定义一个复数类Complex,该类有代表实部与虚部的成员变量,有两个构造函数Complex()...

    1.定义一个复数类Complex,该类有代表实部与虚部的成员变量,有两个构造函数Complex() 2016-08-23 0 0 0 暂无评分 其他 1 积分下载 如何获取积分? 1.定义一个复数类C ...

  9. 【c++】实现一个复数类

    // 实现一个复数类(complex) //要求:1:实现不带参 / 带参数 /带默认参数的几种构造函数. // 2:实现拷贝构造 / 析构函数.#include <iostream> u ...

  10. 创建一个复数类Complex,对复数进行数学运算

    参考,误抄袭 问题描述: 创建一个复数类Complex,对复数进行数学运算,复数具有如下格式:realPart+imaginaryPart*i,其中,i为-1的平方根,具体要求如下: (1)利用浮点变 ...

最新文章

  1. C++中的迭代器(STL迭代器)iterator
  2. 【Visual Studio 2019】上传代码到 GitHub ( 16.9.2 版本 | 安装 GitHub 扩展插件 | 创建 Git 仓库 | 推送到远程仓库 )
  3. 二维数组的查找,刷题成功——剑指Offer
  4. 一个SAP顾问2018年的回顾
  5. webpack入坑指南
  6. 泰迪杯数据挖掘挑战赛—机器学习(二)
  7. 《系统集成项目管理》第十六章 变更管理
  8. 互联网中常见优化手段
  9. Unity3D 官方案例实现类似红警的移动
  10. 数据库中Count是什么意思和SUM有什么区别?
  11. elemtnui 表格如何修改某行文字颜色(elemtnui table 修改某行文字颜色)
  12. 【Java】Exception in thread main java.lang.UnsupportedClassVersionError
  13. Ansible-playbook 运维笔记
  14. [UOJ311]积劳成疾
  15. 入侵检测技术综述(比较全)
  16. Convex Optimization介绍
  17. MySql数据库简介(一)
  18. 艰难的起步---微信小程序访问MSSQL数据库实例
  19. csharp基础练习题:TO DE-RY-PO-陆琪暗号【难度:1级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  20. 2022-2028全球与中国近红外脑成像系统市场现状及未来发展趋势

热门文章

  1. DataGrip下载安装及使用教程(详细版)
  2. 产品06-流程图与结构图
  3. wangeditor富文本编辑器使用遇到的问题
  4. LSTM长短期记忆模型
  5. HTML5汽车赛道飙车游戏,死亡赛道飙车
  6. 将 Word 转换为 Markdown格式 【详细教程】
  7. 【opencv】 使用at和ptr指针访问像素的区别
  8. db_connection.execute(sql_str, *args)执行sql语句
  9. 图像处理之高斯金字塔
  10. Java 开源中文分词器Ansj 学习教程