标题:运算符的重载
取消只看楼主
呜呜1
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2013-9-10
结帖率:100%
已结贴  问题点数:20 回复次数:2 
运算符的重载
#include<iostream>
using  namespace std;
class  Complex
{public:
Complex(double  real=0,double  imag=0);
friend  Complex  operator  *(const  Complex  &c1,const Complex &c2);
friend  Complex  operator  /(const  Complex  &c1,const Complex &c2);

friend  bool  operator  ==(const  Complex  &c1 ,const Complex &c2);
friend  bool operator  !=(const  Complex  &c1,const Complex &c2);
friend  ostream & operator <<(ostream &,Complex &);
friend  istream & operator >>(istream &,Complex &);
 void  compare();

    double  real,imag;
};
//以上是函数声明
Complex::Complex(double r,double i):real(r),imag(i){}
Complex  operator *(const  Complex &c1,const Complex &c2 )
{return Complex(c1.real*c2.real-c1.imag*c2.imag,c1.imag*c2.real+c1.real*c2.imag);}
Complex  operator /(const  Complex &c1,const Complex &c2 )
{return   Complex((c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));}
ostream & operator <<(ostream & output ,Complex &c)
{ output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
return  output;
}
istream & operator >>(istream & input ,Complex &c)
{input>>c.real>>c.imag;
return  input;
}

bool  operator ==(const  Complex &c1,const Complex &c2 )
{if((c1.real==c2.real)&&(c1.imag==c2.imag))
return  true;
else  return  false;
}
bool  operator !=(const  Complex &c1,const Complex &c2 )
{if((c1.real!=c2.real)||(c1.imag!=c2.imag))
return  true;
else  return  false;
}
void Complex::compare(const  Complex &c1,const Complex &c2 )
{if(operator== (c1,c2)==1)
    cout<<"c1==c2";
   else  cout<<"c1!=c2";
}
//以上是函数定义

int  main()
{Complex c1,c2,c3;
cin>>c1;
cin>>c2;
cout<<"c1="<<c1;
cout<<"c2="<<c2;
c3=c1*c2;
cout<<"c3="<<c3;
c3=c1/c2;
cout<<"c3="<<c3;
c1=c2;
cout<<"c1="<<c1;
cout<<"c2="<<c2;
compare(c1,c2);
return 0;
}
//我想实现的功能是修改该类,使之能用重载的>>和<<运算符输入和输出复数;
   2) 重载乘法和除法运算符,使之能执行两个复数的代数乘法和代数除法运算;
   3) 重载运算符==和!=,使之能比较两个复数;
   4) 重载运算符=,使之能进行两个复数的赋值运算。
程序运行后报错,说我compare函数没定义,晕啊
搜索更多相关主题的帖子: Complex include public double friend 
2013-11-17 18:12
呜呜1
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2013-9-10
得分:0 
回复 2楼 i80286
我学的是运算符的重载,重载了 cin  和  cout ,可以cin>>c1,cin>>c2这样使用的
2013-11-17 19:43
呜呜1
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2013-9-10
得分:0 
回复 4楼 i80286

cin>>c1;就是让用户自己输入复数的实部 , 虚部,你看看下面这个程序的主函数,就是这样输入数据的,我建了一个头文件两个源文件,可以运行,就是“比较两个复数大小的功能未实现”




#include<iostream>
using  namespace std;
class  Complex
{public:
Complex(double  real=0,double  imag=0);
friend  Complex  operator  *(const  Complex  &c1,const Complex &c2);
friend  Complex  operator  /(const  Complex  &c1,const Complex &c2);

friend  bool  operator  ==(const  Complex  &c1 ,const Complex &c2);
friend  bool operator  !=(const  Complex  &c1,const Complex &c2);
friend  ostream & operator <<(ostream &,Complex &);
friend  istream & operator >>(istream &,Complex &);
 
    double  real,imag;
};





/////////////////////////////////////


#include"fushu.h"
Complex::Complex(double r,double i):real(r),imag(i){}
Complex  operator *(const  Complex &c1,const Complex &c2 )
{return Complex(c1.real*c2.real-c1.imag*c2.imag,c1.imag*c2.real+c1.real*c2.imag);}
Complex  operator /(const  Complex &c1,const Complex &c2 )
{return   Complex((c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(c1.imag*c2.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));}
ostream & operator <<(ostream & output ,Complex &c)
{ output<<"("<<c.real<<"+"<<c.imag<<"i)"<<endl;
return  output;
}
istream & operator >>(istream & input ,Complex &c)
{input>>c.real>>c.imag;
return  input;
}

bool  operator ==(const  Complex &c1,const Complex &c2 )
{if((c1.real==c2.real)&&(c1.imag==c2.imag))
return  true;
else
 return  false;
}

bool  operator !=(const  Complex &c1,const Complex &c2 )
{if((c1.real!=c2.real)||(c1.imag!=c2.imag))
return  true;
else  
return  false;
}



//////////////////////////////////////////////////


#include"fushu.h"
int  main()
{Complex c1,c2,c3;
cin>>c1;
cin>>c2;
cout<<"c1="<<c1;
cout<<"c2="<<c2;
c3=c1*c2;
cout<<"c3="<<c3;
c3=c1/c2;
cout<<"c3="<<c3;
c1=c2;
cout<<"c1="<<c1;
cout<<"c2="<<c2;
cout<<(c1!=c2)<<endl;
cout<<(c1==c2)<<endl;
system("pause");
return 0;
}




2013-11-17 21:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-423677-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056414 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved