#include <iostream>
using namespace std;
class Complex
{
public:
//构造函数
Complex(double real = 0.0, double image = 0.0)
:_real(real)
,_image(image)
{}
//拷贝构造函数
Complex(const Complex& c)
:_real(c._real)
,_image(c._image)
{}
//析构函数
~Complex()
{}
public:
void Display()
{
if(_image >= 0)
{
cout<<_real<<"+"<<_image<<"i"<<endl;
}
else
{
cout<<_real<<_image<<"i"<<endl;
}
}
//赋值运算符重载
Complex& operator=(const Complex& c)
{
if(this != &c)
{
_real = c._real;
_image = c._image;
}
return *this;
}
//重载+
Complex operator+(const Complex& c)
{
Complex tmp;
tmp._real = _real + c._real;
tmp._image = _image + c._image;
return tmp;
}
//重载+=
Complex& operator+=(const Complex& c)
{
*this = *this + c;
return *this;
}
//重载-
Complex operator-(const Complex& c)
{
Complex tmp;
tmp._real = _real - c._real;
tmp._image = _image - c._image;
return tmp;
}
//重载-=
Complex& operator-=(const Complex& c)
{
*this = *this - c;
return *this;
}
//重载==
bool operator==(const Complex& c)
{
return (_real == c._real && _image == c._image);
}
//重载* (a+bi)(c+di)=(ac-bd)+(bc+ad)i.
Complex operator*(const Complex& c)
{
Complex tmp;
tmp._real = (_real * c._real - _image * c._image);
tmp._image = (_image * c._real + _real * c._image);
return tmp;
}
//重载*=
Complex operator*=(const Complex& c)
{
*this = *this * c;
return *this;
}
//重载 / (a+jb)/(c+jd) = (ac+bd)/(c*2+d*2)+j(bc-ad)/(c*2+d*2)
Complex operator/(const Complex& s)
{
Complex tmp;
tmp._real = (_real * s._real + _image * s._image) / (s._real * 2 + s._image * 2);
tmp._image = (_image * s._real - _real * s._image) / (s._real * 2 + s._image * 2);
return tmp;
}
//重载/=
Complex& operator/=(const Complex& c)
{
*this = *this / c;
return *this;
}
private:
double _real;
double _image;
};
void Test()
{
Complex c1(1, 2);
Complex c2(3, 4);
//Complex c3 = c1 + c2;
//c1 += c2;
c1 -= c2;
c1.Display();
}
int main()
{
Test();
return 0;
}