写C++运算符重载重载复数类输入输出,关系运算发现的问题。

1.重载输入输出运算符的问题。

          (1)重载输入运算符发现的问题。

                     定义一个复数类,定义c1、c2、 c3、 c4、 c5五个对象。

                     主函数中

                            cin >>c1>>c2;

                重载输入运算符,输入输出运算符只能写在public外面。

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

 istream& operator>>(istream& is, complex& t)             

{       

        double _real, _imag;                                                        

        char c1, c2;                                                        

is>>_real >> c1 >> _imag >> c2;                                
if (c1 =='-')
{
_imag-=2*_imag;
}
t.set(_real,_imag);
return is;

}

   //cin 是istream的对象,所以cin用istream  >>运算符,等于cin.>>(cin.c1)

is或os前必须加引用,否则cin,cout会出错,t前也必须有引用,所以形参大体以如图所示格式。                   

通过把加减号和i看成字符输入复数,如果是减号,虚部减两倍,通过set成员函数给t赋上值, 

    函数t前加引用能使改变返回给c1,即给c1赋上值,输入c2时,又可看作(cin>>c1)>>c2,所以(cin>>c1)返回cin格式,即

is.

   输出运算原理几乎也是相同

void operator<<(ostream& os, complex& t)
{
double _real, _imag;
t.get(_real, _imag);
os << fixed << setprecision(2) << _real;
if (_imag > 0)
{
os << '+';
os << fixed << setprecision(2) << _imag<<'i';
    }
else if (_imag < 0)
{
os << fixed << setprecision(2) << _imag<<'i';
}

}

void complex::get(double &_real, double &_imag)
{
_real = real;
_imag = imag;
}

2.求平方和的平方根sqrt(real*real + imag * imag),头文件为math.h

3.

 关系运算符,以不等于为例,if(c3!=c4)  c3!=c4 等于c3.!=c4

因此:

public:  

     bool operator!=(const complex &t)const;

class外

 bool complex::operator!=(const complex &t)const

{
if (real != t.real&&imag != t.imag)
return true;
else
return false;
}

你可能感兴趣的:(写C++运算符重载重载复数类输入输出,关系运算发现的问题。)