#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;
}
//成员函数版重载*运算符
//a*b
Complex operator*(const Complex &a)
{
Complex temp;
temp.real=this->real*a.real;
temp.vir=this->vir*a.vir;
return temp;
}
//成员函数版<运算符重载
//a3<a2
bool operator<(Complex &a2)
{
if(this->real==a2.real)
{
return this->vir<a2.vir;
}
else {
return this->real<a2.real;
}
}
//给重载-运算符的全局函数添加友元的声明
friend Complex operator-(Complex &c1,Complex &c2);
friend bool operator>(Complex &a1,Complex &a2);
friend ostream &operator<<(ostream &out,Complex &c1);
friend istream &operator>>(istream &in,Complex &c1);
};
//使用全局函数重载-运算符
Complex operator-(Complex &c1,Complex &c2)
{
Complex temp;
temp.real = c1.real-c2.real;
temp.vir = c1.vir-c2.vir;
return temp;
}
//全局函数实现>运算符的重载
bool operator>(Complex &a1,Complex &a2)
{
//如果两个类对象的实部相等,判断虚部
if(a1.real==a2.real)
{
return a1.vir>a2.vir;
}else {
return a1.real>a2.real;
}
}
//重载输出<<
ostream &operator<<(ostream &out,Complex &c1)
{
out<<c1.real<<'\t'<<c1.vir<<endl;
return out;
}
//重载输入>>
istream &operator>>(istream &in,Complex &c1)
{
in>>c1.real;
in>>c1.vir;
return in;
}
int main()
{
Complex c1;
Complex c2;
cin>>c1;
cin>>c2;
cout<<c1<<c2;
return 0;
}