#include<iostream>
#include<cmath>
using namespace std;



/**//////////////////////////////Complex Class///////////////////////////////////////
class Complex


{
private:
//double real;
//double image;
//void show();
public:
void show();
double real;
double image;

Complex()
{real=0;image=0;}

~Complex()
{}

Complex(double a,double b)
{real=a;image=b;}

double Getreal()
{return real;}

double Getimage()
{return image;}


double abs()
{return sqrt(real*real+image*image);}

Complex operator +(Complex &other);
Complex operator +(const double &other);
Complex operator +(const int &other);

Complex operator -(Complex &other);
Complex operator -(const double &other);
Complex operator -(const int &other);

Complex operator *(Complex &other);
Complex operator *(const double &other);
Complex operator *(const int &other);



Complex operator /(Complex &other);
Complex operator /(const double &other);
Complex operator /(const int &other);

void operator +=(Complex &other);
void operator +=(const double &other);
void operator +=(const int &other);

void operator -=(Complex &other);
void operator -=(const double &other);
void operator -=(const int &other);

void operator *=(Complex &other);
void operator *=(const double &other);
void operator *=(const int &other);

void operator /=(Complex &other);
void operator /=(const double &other);
void operator /=(const int &other);

Complex operator =(Complex &other);
Complex operator =(const double &other);
Complex operator =(const int &other);

bool operator ==(Complex &other);
bool operator ==(const double &other);
bool operator ==(const int &other);

friend iostream operator<<(iostream &os,Complex &other);
friend iostream operator>>(iostream &is,Complex &other);





};


void Complex::show()


{

if(real>0&&image<0)
printf("%g%gj",real,image);
else if(real>0&&image>0)
printf("%g+%gj",real,image);
else if(real<0&&image>0)
printf("%g+%gj",real,image);
else if(real<0&&image<0)
printf("%g%gj",real,image);
else if(real==0&&image!=0)
printf("%gj",image);
else if(real!=0&&image==0)
printf("%g",real);
else
printf("0");
}

Complex Complex::operator+(Complex &other)


{
Complex temp;
temp.real=real+other.real;
temp.image=image+other.image;
return temp;
}

Complex Complex::operator +(const double &other)


{

Complex temp;
temp.real=real+other;
temp.image=image;
return temp;
}

Complex Complex::operator +(const int &other)


{
Complex temp;
temp.real=real+(double)other;
temp.image=image;
return temp;
}


Complex Complex::operator-(Complex &other)


{
Complex temp;
temp.real=real-other.real;
temp.image=image-other.image;
return temp;
}

Complex Complex::operator -(const double &other)


{
Complex temp;
temp.real=real-(double)other;
temp.image=image;
return temp;
}

Complex Complex::operator -(const int &other)


{
Complex temp;
temp.real=real-(double)other;
temp.image=image;
return temp;
}
Complex Complex::operator*(Complex &other)


{
Complex temp;
temp.real=(real*other.real-image*other.image);
temp.image=(image*other.real+real*other.image);
return temp;

}

Complex Complex::operator *(const double &other)


{
Complex temp;
temp.real=real*other;
temp.image=image*other;
return temp;
}

Complex Complex::operator *(const int &other)


{
Complex temp;
temp.real=real*(double)other;
temp.image=image*(double)other;
return temp;
}

Complex Complex::operator/(Complex &other)


{

Complex temp;
temp.real=((real*other.real)+(image*other.image))/(other.real*other.real+other.image*other.image);
temp.image=((image*other.real)-(real*other.image))/(other.real*other.real+other.image*other.image);
return temp;

}

Complex Complex::operator /(const double &other)


{
Complex temp;
temp.real=real/other;
temp.image=image/other;
return temp;

}

Complex Complex::operator /(const int &other)


{
Complex temp;
temp.real=real/(double)other;
temp.image=image/(double)other;
return temp;
}




void Complex::operator+=(Complex &other)


{
this->real+=other.real;
this->image+=other.image;
}

void Complex::operator +=(const double &other)


{
this->real+=other;
}

void Complex::operator +=(const &other)


{
this->real+=(double)other;
}





void Complex::operator-=(Complex &other)


{
this->real-=other.real;
this->image-=other.image;
}

void Complex::operator -=(const double &other)


{
this->real-=other;
}

void Complex::operator -=(const int &other)


{
this->real-=(double)other;
}



void Complex::operator*=(Complex &other)


{
this->real=(real*other.real-image*other.image);
this->image=(image*other.real+real*other.image);;
}

void Complex::operator *=(const double &other)


{
this->real=real*other;
this->image=image*other;
}

void Complex::operator *=(const int &other)


{
this->real=real*(double)other;
this->image=image*(double)other;
}


void Complex::operator/=(Complex &other)


{
this->real=((real*other.real)+(image*other.image))/(other.real*other.real+other.image*other.image);
this->image=((image*other.real)-(real*other.image))/(other.real*other.real+other.image*other.image);
}

void Complex::operator /=(const double &other)


{
this->real=real/other;
this->image=image/other;
}

void Complex::operator /=(const int &other)


{
this->real=real/(double)other;
this->image=image/(double)other;
}

Complex Complex::operator= (Complex &other)


{

this->real=other.real;
this->image=other.image;
return *this;

}
Complex Complex::operator =(const double &other)


{
this->real=other;
this->image=image;
return *this;


}
Complex Complex::operator =(const int &other)


{
this->real=(double)other;
this->image=image;
return *this;
}


bool Complex::operator ==(Complex &other)


{

if(this->real=other.real&&this->image==other.image)
return true;
else return false;
}
bool Complex::operator ==(const double &other)


{

if(this->real==other&&this->image==0)
return true;
else
return false;
}
bool Complex::operator ==(const int &other)


{
if(this->real==(double)other&&this->image==0)
return true;
else
return false;
}

ostream& operator<<(ostream &cout,Complex &other)


{
other.show();
return cout;
}

istream& operator>>(istream &cin,Complex &other)


{
cin>>other.real;
cin>>other.image;
return cin;
}

/**//////////////////////////////END_COMPLEX_CLASS///////////////////////////////














int main()


{
Complex test1(10,6);
Complex test2(5,3);
cout<<test1*test2<<endl;
cout<<test1+test2<<endl;
cout<<test1/test2<<endl;
cout<<test1-test2<<endl;
return 0;
}
不知道是人品问题还是其他什么因素,当我把real和image放在私有成员里面时编译居然会报错???我已经将>>和<<重载为友元函数了丫?
我试了下网上和我写的差不多的程序,结果是他的能过我的 就是不行,而出问题的<<,>>部分居然还是一样的。我...无语了...究竟是怎么回事?