#include <iostream>
using namespace std;
class Complex
{
int real;
int vir;
public:
Complex(){}
Complex(int a,int b):real(a),vir(b){}
void show()
{
cout << real << "+" << vir << "i" << endl;
}
//成员函数版的运算符重载
Complex operator*(Complex &a)
{
//temp用于存储运算的临时结构
Complex temp;
temp.real = this->real*a.real;
temp.vir = this->vir*a.vir;
//运算结束把结果返回
return temp;
}
Complex operator+(Complex &a)
{
//temp用于存储运算的临时结构
Complex temp;
temp.real = this->real+a.real;
temp.vir = this->vir+a.vir;
//运算结束把结果返回
return temp;
}
Complex operator-(Complex &a)
{
//temp用于存储运算的临时结构
Complex temp;
temp.real = this->real-a.real;
temp.vir = this->vir-a.vir;
//运算结束把结果返回
return temp;
}
Complex operator/(Complex &a)
{
//temp用于存储运算的临时结构
Complex temp;
temp.real = this->real/a.real;
temp.vir = this->vir/a.vir;
//运算结束把结果返回
return temp;
}
Complex operator+=(Complex &a)
{
//temp用于存储运算的临时结构
this->real = this->real+a.real;
this->vir= this->vir+a.vir;
//运算结束把结果返回
}
Complex operator-=(Complex &a)
{
//temp用于存储运算的临时结构
this->real = this->real-a.real;
this->vir= this->vir-a.vir;
//运算结束把结果返回
}
Complex operator*=(Complex &a)
{
//temp用于存储运算的临时结构
this->real = this->real*a.real;
this->vir= this->vir*a.vir;
//运算结束把结果返回
}
Complex operator/=(Complex &a)
{
//temp用于存储运算的临时结构
this->real = this->real/a.real;
this->vir= this->vir/a.vir;
//运算结束把结果返回
}
Complex operator++(int)
{
Complex temp;
temp.real = this->real++;
temp.vir= this->vir++;
return temp;
}
Complex operator++()
{
this->real = ++this->real;
this->vir= ++this->vir;
return *this;
}
Complex operator--(int)
{
Complex temp;
temp.real = this->real--;
temp.vir= this->vir--;
return temp;
}
Complex operator--()
{
this->real = --this->real;
this->vir= --this->vir;
return *this;
}
//给重载-运算符的全局函数添加友元的声明
friend Complex operator-(Complex &c1,Complex &c2);
};
//使用全局函数重载-运算符
Complex operator-(Complex &c1,Complex &c2)
{
Complex temp;
temp.real = c1.real-c2.real;
temp.vir = c1.vir-c2.vir;
return temp;
}
int main()
{
Complex c1(3,5);
Complex c2(4,6);
Complex c3;
Complex c6;
c6 = c1+c2;
cout << "c6=";
c6.show(); //7+11i
c3 = c1*c2;
cout << "c3=";
c3.show(); //12+30i
return 0;
}