Complex

为复数类(Complex)增加重载的运算符-、-=、*=和/=。设++为实部和虚部各自增一,亦请重载前置与后置++运算符。
分别使用成员函数和友元函数各做一遍。并测试。
解:注意后++,返回的是原值,但实部和虚部已各自增一,所以要先保留原值,再++。

这里是使用成员函数:

#include<iostream> 
using namespace std;

class complex
{
private:
	double real;	  //实部
	double imag;      //虚部
public:
	complex(double r = 0.0 ,double i = 0.0 );	//构造函数 
	void print();		                        //显示复数 
	complex operator	+(complex c);	        //重载复数"+" 
	complex operator	-(complex c);	        //重载复数"-" 
	complex operator	*(complex c);	        //重载复数"*" 
	complex operator	/(complex c);	        //重载复数"/" 
	complex operator +=(complex c);	            //重载复数"+=" 
	complex operator -=(complex c);	            //重载复数"-=" 
	complex operator *=(complex c);	            //重载复数"*=" 
	complex operator /=(complex c);	            //重载复数"/="
	complex operator ++();	                    //重载复数前缀"++" 
	complex operator ++(int);	                //重载复数后缀"++"
};

complex::complex(double r,double i)
{
	real = r;
	imag = i;
}

complex complex::operator +(complex c)
{	//重载复数"+" 
	complex temp;
	temp.real=real+c.real;
	temp.imag=imag+c.imag;
	return temp; //返回局部变量,函数声明不可为引用,这时返回了局部变量的地址
}
 

complex complex::operator -(complex c)
{	//重载复数"-"
	complex temp; 
	temp.real=real-c.real; 
	temp.imag=imag-c.imag; 
	return temp;
}

complex complex::operator *(complex c)
{	//重载复数"*" 
	complex temp;
	temp.real=real*c.real-imag*c.imag; 
	temp.imag=real*c.imag+imag*c.real; 
	return temp;
}

complex complex::operator /(complex c)
{	//重载复数"/" 
	complex temp;
	double d;
	d=c.real*c.real+c.imag*c.imag;
	temp.real=(real*c.real+imag*c.imag)/d;
	temp.imag=(c.real*imag-real*c.imag)/d; 
	return temp;
}
complex complex::operator +=(complex c)
{	//重载复数"+=" 
	complex temp;
	temp.real=real+c.real;
	temp.imag=imag+c.imag; 
	real=temp.real; 
	imag=temp.imag;
	return temp;
}

complex complex::operator -=(complex c)
{	//重载复数"-=" 
	complex temp;
	temp.real=real-c.real; 
	temp.imag=imag-c.imag; 
	real=temp.real; 
	imag=temp.imag;
	return temp;
}

complex complex::operator *=(complex c)
{	//重载复数"*=" 
	complex temp;
	temp.real=real*c.real-imag*c.imag; 
	temp.imag=real*c.imag+imag*c.real; 
	real=temp.real;
	imag=temp.imag;
	return temp;
}
 
complex complex::operator /=(complex c)
{	//重载复数"/="
	complex temp; double d; 
	d=c.real*c.real+c.imag*c.imag; 
	temp.real=(real*c.real+imag*c.imag)/d;
	temp.imag=(c.real*imag-real*c.imag)/d;
	real=temp.real; 
	imag=temp.imag; 
	return temp;
}

complex complex::operator ++()
{	//重载复数前缀"++" 
	complex temp;
	temp.real=++real; 
	temp.imag=++imag; 
	return temp;
}
complex complex::operator ++(int)
{	//重载复数后缀"++" 
	complex temp(real,imag);
	real++; 
	imag++; 
	return temp;
}

void complex::print()
{	//显示复数
	cout << real; 
	if(imag>=0) cout<<'+'; 
	cout<<imag<<'i'<<endl;
}

int main()
{
	complex A(30,40),B(15,30),C,D;	          //定义4个复数对象 
	cout<<"A为:";A.print(); 
	C=A.operator++(1);                        //即C=A++完整的表达式 
	cout<<"C=A++后,C为:"; C.print();
	cout<<"A为:";A.print(); 
	C=A.operator++();                         //即++A 
	cout<<"C=++A后,C为:"; C.print(); 
	cout<<"A为:"; A.print();
	C=A*B;
	cout<<"C=A*B后,C为:"; C.print();
	A*=B;
	cout<<"A*=B后,A为:"; A.print();
	C=A/B;
	cout<<"C=A/B后,C为:"; C.print(); 
	A/=B;
	cout<<"A/=B后,A为: ";A.print();
	cout<<"B为:"; B.print();
	D=A+B+C; 
	cout<<"D=A+B+C后,D为:"; D.print(); 
	A+=B+=C; 
	cout<<"A+=B+=C后,A为:"; A.print(); 
	cout<<"B为:"; B.print();
	D=A-B-C;
	cout<<"D=A-B-C后,D为:"; D.print(); 
	A-=B+=C;
	cout<<"A-=B+=C后,A为:"; A.print();
	cout<<"B为:"; B.print(); 
	A=B;
	cout<<"A=B后,A为:"; A.print(); 
	D=A*B*C; 
	cout<<"D=A*B*C后,D为:"; D.print(); 
	D=D/B/C;
	cout<<"D=D/B/C后,D为:"; D.print(); 
	A*=B*=C;
	cout<<"A*=B*=C后,A为:"; A.print(); 
	A/=B/=C/=C; 
	cout<<"A/=B/=C/=C后,A为:"; A.print(); 
	return 0;
}

运行结果!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值