/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
#ifndef COMPLEX_H
#define COMPLEX_H
#include <iostream>
#include <complex>
using std::ostream;
struct complex_number{
complex_number(int n): n(n){}
complex_number operator+(const complex_number &)const;
complex_number operator-(const complex_number &)const;
complex_number operator*(const complex_number &)const;
complex_number operator/(const complex_number &)const;
complex_number operator+(int) const;
complex_number operator-(int) const;
complex_number operator*(int) const;
complex_number operator/(int) const;
complex_number operator+(double) const;
complex_number operator-(double) const;
complex_number operator*(double) const;
complex_number operator/(double) const;
friend complex_number operator+(int, const complex_number &);
friend complex_number operator-(int, const complex_number &);
friend complex_number operator*(int, const complex_number &);
friend complex_number operator/(int, const complex_number &);
friend complex_number operator+(double, const complex_number &);
friend complex_number operator-(double, const complex_number &);
friend complex_number operator*(double, const complex_number &);
friend complex_number operator/(double, const complex_number &);
friend ostream &operator<<(ostream &, const complex_number &);
private:
int n;
};
#endif /* COMPLEX_H */
/* complex.cc */
#include <iostream>
complex_number complex_number::operator+(const complex_number &o)const
{
return complex_number (n + o.n);
}
complex_number complex_number::operator+(int n) const
{
return complex_number(n + n);
}
complex_number complex_number::operator-(const complex_number &o)const
{
return complex_number(n - o.n);
}
complex_number complex_number::operator-(int n)const
{
return complex_number(n - n);
}
complex_number complex_number::operator*(const complex_number &o)const
{
return complex_number (n * o.n);
}
complex_number complex_number::operator*(int n)const
{
return complex_number (n * n);
}
complex_number complex_number::operator/(const complex_number &o)const
{
return complex_number (n / o.n);
}
complex_number complex_number::operator/(int n)const
{
return complex_number (n / n);
}
complex_number operator+(int n, const complex_number &o)
{
return o + n;
}
complex_number operator-(int n, const complex_number &o)
{
return complex_number(n) - o;
}
complex_number operator*(int n, const complex_number &o)
{
return o * n;
}
complex_number operator/(int n, const complex_number &o)
{
return complex_number(n) / o;
}
ostream &operator<<(ostream &out, const complex_number &o)
{
return out<<o.n;
}
/* main.cc */
#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
int a = 4;
int b = 4;
int c = 2;
int d = 1;
int j = (-1);
double n = 5.0;
cout << a + b << " + " << c + d << " = " << (a + b) + (c + d) <<endl;
cout << a + b << " - " << c + d << " = " << (a + b) - (c + d) << endl;
cout << a + b << " * " << c + d << " = " << (a + b) * (c + d) << endl;
cout << a + b << " / " << c + d << " = " << (a + b) / (c + d) << endl;
cout << a + b << " + " << 5.0 << " = " << (a + b) + (5.0) << endl;
cout << a + b << " - " << 5.0 << " = " << (a + b) - (5.0) << endl;
cout << a + b << " * " << 5.0 << " = " << (a + b) * (5.0) << endl;
cout << a + b << " / " << 5.0 << " = " << (a + b) / (5.0) << endl;
cout << 5.0 << " + " << a + b << " = " << (5.0) + (a + b) << endl;
cout << 5.0 << " - " << a + b << " = " << (5.0) - (a + b) << endl;
cout << 5.0 << " * " << a + b << " = " << (5.0) * (a + b) << endl;
cout << 5.0 << " / " << a + b << " = " << (5.0) / (a + b) << endl;
return 0;
}