使用c++ ,重写运算符,编写complex方法

#ifndef _COMPLEX_		//防卫式声明 ,预防头文件重复声明 ,名字自己写的 
#define _COMPLEX_ 
#include<iostream>
using namespace std;
	class complex
	 { 	
	private :
		int re,im;
	public :
	//1.注:1与2不可同时存在,因为在声明变量不输入参数时,对于选择调用哪个函数系统会产生混乱,其中方法2包括方法1 
	/*	//方式1:在无参时调用该方法 
		complex()
			:re(0),im(0)
			{ }
	*/
	//方式2: 
		complex(int r = 0,int i =0)	//传递方式可以为value/引用 
		: re(r),im(i)				//构造函数内独特的赋值方式 
			{ }						
		int real() const {return re;} //const表示函数不会改变数据 
		int imag() const {return im;}
		// 
		inline complex& operator +=(const complex& x);
		// 
		friend	inline complex&  _doapl(complex*,const complex&);//取得实部与虚部 
	 };

 

//成员函数:修改+=
 //complex&// 返回类型 ( 左面存在可以传引用) 
 	//imag real 不带class 代表全域
 	inline int 
	 imag (const complex &x)
	 {
	 	return x.imag();
	  } 
	inline int 
	 real(const complex &x)
	  {
	  	return x.real();
	   }
	//思考:返回类型为什么选择引用
 	inline complex&		 
 	_doapl(compl	x* ths,const complex& r)
 	{
		 ths->re+=imag(r);
 		ths->im+=real(r);
 		return *ths;
	 }
	 //  返回类型可以为void类型,但是在c3+=c2+=c1;情况下c2+=c1会返回一个void类型; 
	 inline complex&  complex::operator +=(const complex& r)
 	{
 		return 	_doapl(this,r);//带括号的为临时对象, 
	 } 

 

	//非成员函数:
	//+函数返回类型不可以为引用,因为它的返回值必定为 
	//带括号的为临时对象,函数调用完或下一行代码,临时对象就死掉,传递的引用就毫无意义。
	//为何重写+=时就可以传递引用呢?
	//+=时两个变量相加,将值赋给被加变量,而这个变量函数外的,并不会随着函数调用结束为死亡。
	//tip:如果将+函数写到class里称为成员函数,只能应付复 数加复数的情况 
	inline complex operator + (const complex& x,const complex& y)
 	{
 		return complex(real(x)+real(y),imag(x)+imag(y));
 	}
 	//重写正负号,复数的求正负的方法 
 	inline complex operator -(complex & x)
 	{
 		return complex(-x.real(),-x.imag());
	 }
	 inline complex operator +(const complex & x)
	 {
	 	return x;
	 }
 	//输出 
 	inline ostream& operator <<(ostream & os,const complex& x)
	 {
		return os<<'('<<x.real()<<','<<x.imag()<<')'<<endl;
	  } 
	  #endif

 

int main()
{
	int a=1,b=2;
	int  p[10];
	complex clo(1,3); 
	cout<<"clo="<<clo;
	complex clo_2(10,-11); 
	cout<<"clo_2="<<clo_2;
	complex clo_3;
	clo_3=(clo+clo_2);
	cout<<"clo_3="<<clo_3;
	cout<<"-clo_3="<<-clo_3;
	cout<<"+clo_3="<<+(-clo_3);
	return 0;
 } 	

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值