实现复数的一般算术运算

/*---------------------------------------
2011.8.28
实现一个用于表示复数的类,复数全部用
a+bi的形式表示,不存在a-bi(表示成
a+(-b)i的形式)这种形式
---------------------------------------*/
#include<iostream>
#include<string>
#include<sstream>
using namespace std;

class Complex 
{
public:
	Complex(double x=0,double y=0)
		:real_part(x),imaginary_part(y)
	{
	}
	double get_rpart() const
	{
		return real_part;
	}
	double get_impart() const
	{
		return imaginary_part;
	}
	void set_num(double x,double y)
	{
		real_part=x;
		imaginary_part=y;
	}
	Complex& operator+=(const Complex& );
	Complex& operator-=(const Complex& );
	Complex& operator*=(const Complex& );
	Complex& operator/=(const Complex& );
	~Complex()
	{
	}

private:
	double real_part,imaginary_part;
};
//--------------------------------------------------------------------------------------------------------------
//重载操作符'+='
inline Complex& Complex::operator +=(const Complex& c)
{
	real_part+=c.real_part;
	imaginary_part+=c.imaginary_part;
	return *this;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'+'
inline Complex& operator+(const Complex& c1,Complex& c2)
{
	Complex c(c1); //将左操作数赋给到我们要返回的局部对象
	c+=c2;
	return c;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'-='
inline Complex& Complex:: operator-=(const Complex& c)
{
	real_part-=c.real_part;
	imaginary_part-=c.imaginary_part ;
	return *this;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'-'
inline Complex& operator-(const Complex& c1,const Complex& c2)
{
	Complex c(c1);
	c-=c2;
	return c;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'*='
inline Complex& Complex:: operator*=(const Complex& c)
{
	double real_p=real_part;
	double ima_p=imaginary_part;
	real_part=real_p*c.real_part -ima_p*c.imaginary_part ;
	imaginary_part=real_p*c.imaginary_part +ima_p*c.real_part;
	return *this;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'*'
inline Complex& operator*(const Complex& c1,const Complex& c2)
{
	Complex c(c1);
	c*=c2;
	return c;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'/='
 Complex& Complex::operator /=(const Complex& c)
{
	double real_p=real_part;
	double ima_p=imaginary_part;
	double deno=c.real_part*c.real_part +c.imaginary_part*c.imaginary_part;//分母
	double real_num=real_p*c.real_part +ima_p*c.imaginary_part;//实部分子
	double ima_num=ima_p*c.real_part-real_p*c.imaginary_part ;//虚部分子
	real_part=real_num/deno;
	imaginary_part=ima_num/deno;
	return *this;

}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'/'
inline Complex& operator/(const Complex& c1,const Complex& c2)
{
	Complex c(c1);
	c/=c2;
	return c;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'<<'
ostream& operator<<(ostream& os,const Complex& c)
{
	if(c.get_impart()<0)
	{
		os<<c.get_rpart()<<'+'<<'('<<c.get_impart ()<<')'<<'i';
	    os<<endl;
	}
	else
	{
		os<<c.get_rpart()<<'+'<<c.get_impart ()<<'i';
	    os<<endl;
	}
	return os;
}
//--------------------------------------------------------------------------------------------------------------
//重载操作符'>>'
istream& operator>>(istream& is,Complex& c)
{
	double x,y;
	char c1,c2;
	is>>x>>c1>>y>>c2; //输入时别忘了各个变量之间加空格
	if(!is) return is;
	if(c1!='+'||c2!='i')
	{
		is.clear (ios_base::failbit);
		return is;
	}
	c.set_num (x,y);
	return is;
}
//--------------------------------------------------------------------------------------------------------------
int main()
{
	Complex c1(12,1);
	Complex c2(1,3);
	Complex c3=c1+c2;
	Complex c4=c1-c2;
	Complex c5=c1*c2;
	Complex c6=c1/c2;
	cout<<"c1+c2="<<c3<<'\n';
	cout<<"c1-c2="<<c4<<'\n';
	cout<<"c1*c2="<<c5<<'\n';
	cout<<"c1/c2="<<c6<<'\n';
	Complex c7;
	cin>>c7;
	cout<<"c7="<<c7<<endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值