#include<iostream>
using namespace std;
class Complex
{
public:
Complex(double real = 0.0, double image = 0.0)
{
this->_real = real;
_image = image;
}
Complex(const Complex &c)
{
_real = c._real;
_image = c._image;
}
Complex& operator=(const Complex &c)
{
_real = c._real;
_image = c._image;
return *this;
}
bool operator>(const Complex &c)
{
double tmp1,tmp2;
tmp1 = sqrt(pow(_real, 2) + pow(_image, 2));
tmp2 = sqrt(pow(c._real, 2) + pow(c._image, 2));
return tmp1 > tmp2;
}
bool operator==(const Complex &c)
{
return sqrt(pow(_real, 2) + pow(_image, 2)) == sqrt(pow(c._real, 2) + pow(c._image, 2));
}
bool operator>=(const Complex &c)
{
return ((*this > c) || (*this == c));
}
bool operator<(const Complex &c)
{
return sqrt(pow(_real, 2) + pow(_image, 2)) < sqrt(pow(c._real, 2) + pow(c._image, 2));
}
bool operator<=(const Complex &c)
{
return (*this < c) || (*this == c);
}
Complex operator+(const Complex &c)
{
Complex add;
add._real = _real + c._real;
add._image = _image + c._image;
return add;
}
Complex operator-(const Complex &c)
{
Complex sub;
sub._real = _real - c._real;
sub._image = _image - c._image;
return sub;
}
Complex operator*(const Complex &c)const//******
{
Complex mul;
mul._real = _real*c._real - _image*c._image;
mul._image = _real*c._image + _image*c._real;
return mul;
}
Complex operator/(const Complex &c)******
{
Complex div;
Complex c1;
c1._real = c._real;
c1._image = (-1)*c._image;
const Complex c2 = c*c1;//********************易错
div._real = ((*this*c1)._real) / (c2._real);
div._image = ((*this*c1)._image) / (c2._real);
return div;
}
Complex operator+=(const Complex &c)
{
_real = _real + c._real;
_image = _image + c._image;
return *this;
}
Complex operator-=(const Complex &c)
{
_real = _real - c._real;
_image = _image - c._image;
return *this;
}
Complex operator++(int)//后置
{
Complex tmp(*this);
_real++;
_image++;
return tmp;
}
Complex operator++()//前置
{
_real++;
_image++;
return *this;
}
Complex operator--(int)//后置
{
Complex tmp(*this);
_real--;
_image--;
return tmp;
}
Complex operator--()//前置
{
_real--;
_image--;
return *this;
}
void Display()
{
if (_real != 0)
{
if (_image>0)
cout << "Complex=" << _real << "+i" << _image << endl;
else if (_image < 0)
cout << "Complex=" << _real << "-i" << (_image)*(-1) << endl;
else
cout << "Complex=" << _real << endl;
}
else
{
if (_image>0)
cout << "Complex=" << "i" << _image << endl;
else if (_image < 0)
cout << "Complex=" << "-i" << (_image)*(-1) << endl;
else
cout << "Complex=" << _real << endl;
}
}
~Complex()
{
}
private:
double _real;
double _image;
};
void Test()
{
Complex c1(2,1);
c1.Display();
//Complex c2(c1);
Complex c2=c1;
c2.Display();
Complex c3,c4;
c4=c3 = c2;
c3.Display();
c4.Display();
Complex c5(1,2);
c5.Display();
bool ret1 = c1 > c5;
cout << "> "<<ret1 << endl;
bool ret2 = c1 == c5;
cout << "== " << ret2 << endl;
bool ret3 = c1 >= c5;
cout << ">= " << ret3 << endl;
bool ret4 = c1 < c5;
cout << "< " << ret4 << endl;
bool ret5 = c1 <= c5;
cout << "<= " << ret5 << endl;
Complex add = c1 + c5;
add.Display();
Complex sub = c1 - c5;
sub.Display();
Complex mul = c1 * c5;
mul.Display();
Complex div = c1 / c5;
div.Display();
(c1 += c5).Display();
(c1 -= c5).Display();
(c1++).Display();
(++c5).Display();
(c1--).Display();
(--c5).Display();
}
int main()
{
Test();
system("pause");
return 0;
}原文:http://lingdandan.blog.51cto.com/10697032/1713118