【C++】复数类的四则运算符重载及输入输出重载

题目:
实现一个复数类,要求重载加减乘除及输入输出,输出保留两位小数。分别输入两个复数的实部和虚部,依次输出加减乘除后的结果。

例:

输入:

3 4
7 8

输出:

10.00+12.00i
-4.00-4.00i
-11.00+52.00i
0.47+0.04i

输入:

0 0
5 0

输出 (当虚部为0时,可以不输出)

5
-5
0
0

程序代码:

#include <iostream>
#include <iomanip>
using namespace std;

class ComplexNumber  //定义ComplexNumber复数类
{
	public:
		ComplexNumber(double xx=0.00,double yy=0.00)  //构造函数
		{
			x=xx;
			y=yy;
		}
		ComplexNumber operator+ (ComplexNumber &z);  //声明复数类加法 
		ComplexNumber operator- (ComplexNumber &z);  //声明复数类减法 
		ComplexNumber operator* (ComplexNumber &z);  //声明复数类乘法 
		ComplexNumber operator/ (ComplexNumber &z);  //声明复数类除法 
		friend istream& operator >> (istream &in,ComplexNumber &z);  //声明友元函数,重载输入 
		friend ostream& operator << (ostream &out,const ComplexNumber &z);  //声明友元函数,重载输出 
	private:
		double x,y;
};

ComplexNumber ComplexNumber::operator+ (ComplexNumber &z)  //实现复数类加法 
{
	ComplexNumber t;
	t.x=x+z.x;
	t.y=y+z.y;
	return t;
}

ComplexNumber ComplexNumber::operator- (ComplexNumber &z)   //实现复数类减法 
{
	ComplexNumber t;
	t.x=x-z.x;
	t.y=y-z.y;
	return t;
}

ComplexNumber ComplexNumber::operator* (ComplexNumber &z)  //实现复数类乘法 
{
	ComplexNumber t;
	t.x=(x*z.x)-(y*z.y);
	t.y=(z.y*x)+(y*z.x);
	return t;
}

ComplexNumber ComplexNumber::operator/ (ComplexNumber &z)   //实现复数类除法 
{
	ComplexNumber t;
	t.x=((x*z.x)+(y*z.y)) / ((z.x*z.x)+(z.y*z.y));
	t.y=((y*z.x)-(x*z.y)) / ((z.x*z.x)+(z.y*z.y));
	return t;
}

istream & operator >> (istream &in,ComplexNumber &z)  //实现重载输入 
{
	in>>z.x>>z.y;
	return in;
}

ostream & operator << (ostream &out,const ComplexNumber &z)  //实现重载输出 
{
	if(z.y>0)  //虚部大于0时,输出为复数类,且有加号 
	{
	    out<<fixed<<setprecision(2)<<z.x;
	    out<<"+"<<fixed<<setprecision(2)<<z.y<<"i";
	    return out;
	}
	else if(z.y<0)  //虚部小于0时,输出为复数类,没有加号
	{
		out<<fixed<<setprecision(2)<<z.x;
	    out<<fixed<<setprecision(2)<<z.y<<"i";
	    return out;
	} 
	else if(z.y==0)  //虚部为0时,直接输出实部 
	{
	    out<<z.x;
	    return out;
	}
}

void CN()   //计算函数,实现复数类的四则运算
{ 
	ComplexNumber cn1, cn2;
	std::cin >> cn1 >> cn2;
	std::cout<<cn1+cn2 << std::endl;
	std::cout<<cn1 - cn2 << std::endl;
	std::cout<<cn1*cn2 << std::endl;
	std::cout<<cn1 / cn2 << std::endl;
}

int main()  //主函数
 {
	CN();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeron Zhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值