C++中运算符重载实现复数的加减乘除

#include "stdafx.h"
#include "Complex.h"
#include <iostream>
using namespace std;

//输入运算符重载
istream & operator >>(istream &in,Complex &c)
{
	in>>c.real>>c.imag;
	return in;
}
//输出运算符重载
ostream & operator <<(ostream &out,Complex &c)
{
	if(c.imag>0)
		out<<c.real<<"+"<<c.imag<<"i"<<endl;
	else if(c.real==0)
		out<<c.imag<<"i"<<endl;
	else if(c.imag==0)
		out<<c.real<<endl;
	else out<<c.real<<c.imag<<"i"<<endl;
	return out;
}
Complex::Complex()
{real=0;imag=0;}
Complex::Complex(double r,double i)
{
	real=r;
	imag=i;
}
//实现复数+复数
Complex Complex::operator+(Complex &c1)
{
	Complex c;
	c.real=real+c1.real;
	c.imag=imag+c1.imag;
	return c;
}
//复数+实数
Complex Complex::operator+(double r)
{
	Complex c;
	c.real=real+r;
	c.imag=imag;
	return c;
}
//实数+复数
Complex operator+(double r,Complex &c1)
{
	Complex c;
	c.real=r+c1.real;
	c.imag=c1.imag;
	return c;
}
//-复数   对复数取反
Complex Complex::operator-(void)
{
	Complex c;
	c.real=-real;
	c.imag=-imag;
	return c;
}
//复数-复数
Complex Complex::operator-(Complex &c1)
{
	Complex c;
	c.real=real-c1.real;
	c.imag=imag-c1.imag;
	return c;
}
//复数-实数
Complex Complex::operator-(double r)
{
	Complex c;
	c.real=real-r;
	c.imag=imag;
	return c;
}
//实数-复数
Complex operator-(double r,Complex &c1)
{
	Complex c;
	c.real=r-c1.real;
	c.imag=-c1.imag;
	return c;
}
//自增++
Complex Complex::operator++()//++前置
{
	Complex c;
	c.real=++real;
	c.imag=++imag;
	return c;
}
Complex Complex::operator++(int)//++后置
{
	Complex temp(*this);
	real++;
	imag++;
	return temp;
}

//自减--
Complex Complex::operator--()//--前置
{
	Complex c;
	c.real=--real;
	c.imag=--imag;
	return c;
}
Complex Complex::operator--(int)//--后置
{
	Complex temp(*this);
	real--;
	imag--;
	return temp;
}

//复数*复数
Complex Complex::operator*(Complex &c1)
{
	Complex c;
	c.real=real*c1.real-imag*c1.imag;
	c.imag=real*c1.imag+imag*c1.real;
	return c;
}

//复数*实数
Complex Complex::operator*(double r)
{
	Complex c;
	c.real=real*r;
	c.imag=imag*r;
	return c;
}

//实数*复数
Complex operator*(double r,Complex &c1)
{
	Complex c;
	c.real=r*c1.real;
	c.imag=r*c1.imag;
	return c;
}

//复数除复数
Complex Complex::operator/(Complex &c1)
{
	Complex c;
	c.real=(real*c1.real+imag*c1.imag)/(c1.real*c1.real+c1.imag*c1.imag);
	c.imag=(imag*c1.real-real*c1.imag)/(c1.real*c1.real+c1.imag*c1.imag);
	return c;
}
//复数除实数
Complex Complex::operator/(double r)
{
	if(r)//判断被除数是否为0
	{
		Complex c;
		c.real=real/r;
		c.imag=imag/r;
		return c;
	}
	else cout<<"Arithmetic Exception"<<endl;
}
//实数除复数
Complex operator/(double r,Complex &c1)
{
	Complex c;
	c.real=r*c1.real/(c1.real*c1.real+c1.imag*c1.imag);
	c.imag=-r*c1.imag/(c1.real*c1.real+c1.imag*c1.imag);
	return c;
}
  • 11
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值