#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

class Complex_Number{
	private:
		float real_part;
		float virtual_part;
	public:
		Complex_Number(float _real_part=0,float _virtual_part=0){
			this->real_part=_real_part;
			this->virtual_part=_virtual_part;
		}
		~Complex_Number(){
			real_part=virtual_part=0;
		}
		float Get_real_part();
		float Get_virtual_part();
		float Module();
		
		friend istream &operator>>(istream &in,Complex_Number &cpn);
		friend ostream &operator<<(ostream &out,Complex_Number &cpn);
		
		friend Complex_Number operator+(const Complex_Number &a,const Complex_Number &b);
		friend Complex_Number operator-(const Complex_Number &a,const Complex_Number &b);
		friend Complex_Number operator*(const Complex_Number &a,const Complex_Number &b);
		friend Complex_Number operator/(const Complex_Number &a,const Complex_Number &b);
//compare by module
		friend Complex_Number operator>(const Complex_Number &a,const Complex_Number &b);
		friend Complex_Number operator<(const Complex_Number &a,const Complex_Number &b);
//		friend Complex_Number operator=();
};

float Complex_Number::Get_real_part(){
	return this->real_part;
}

float Complex_Number::Get_virtual_part(){
	return this->virtual_part;
}

float Complex_Number::Module(){
	return sqrt( pow(real_part,2) + pow(virtual_part,2) );
}

istream &operator>>(istream &in,Complex_Number &cpn){
	cout<<"Enter real part: ";
	in>>cpn.real_part;
	cout<<"Enter virtual part: ";
	in>>cpn.virtual_part;
	return in;
}

ostream &operator<<(ostream &out,Complex_Number &cpn){
	out<<cpn.real_part<<" + "<<cpn.virtual_part<<"i";
	return out;
}

Complex_Number operator+(const Complex_Number &a,const Complex_Number &b){
	Complex_Number c;
	c.real_part = a.real_part + b.real_part;
	c.virtual_part = a.virtual_part + b.virtual_part;
	return c; 
}

Complex_Number operator-(const Complex_Number &a,const Complex_Number &b){
	Complex_Number c;
	c.real_part = a.real_part - b.real_part;
	c.virtual_part = a.virtual_part - b.virtual_part;
	return c; 
}

Complex_Number operator*(const Complex_Number &a,const Complex_Number &b){
	Complex_Number c;
	c.real_part = (a.real_part * b.real_part) - (a.virtual_part * b.virtual_part);
	c.virtual_part = (a.real_part * b.virtual_part) + (a.virtual_part * b.real_part);
	return c;
}

Complex_Number operator/(const Complex_Number &a,const Complex_Number &b){
	Complex_Number c;
	c.real_part=( (a.real_part * b.real_part) + (a.virtual_part * b.virtual_part) ) / b.Module();
	c.virtual_part=( (a.virtual_part * b.real_part) - (a.real_part * b.virtual_part) ) / b.Module();
	return c;
}

Complex_Number operator>(Complex_Number &a,Complex_Number &b){
	Complex_Number c;
	if(a.Module() > b.Module())
		return true;
	else
		return false;
}



int main(){
	setprecision(2);
}





