//2012 02 10
//연산자오버로딩총집합!! Operate Overloading!!
//i_co
//Daun..
//영어따위 틀려도... 나만 알아 듣는다면... 휴우 ㅠㅠ
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
class Complex
{
public:
Complex();
Complex(int,int);
friend ostream &operator<<(ostream &,Complex &);
friend istream &operator>>(istream &,Complex &);
Complex operator++();
Complex operator--();
Complex operator++(int);
Complex operator--(int);
Complex operator+(Complex &);
Complex operator-(Complex &);
Complex operator*(Complex &);
Complex operator/(Complex &);
Complex operator+=(Complex);
Complex operator-=(Complex);
Complex operator*=(Complex);
Complex operator/=(Complex);
Complex operator=(Complex);
bool operator==(Complex);
bool operator!=(Complex);
bool operator<(Complex);
bool operator>(Complex);
bool operator<=(Complex);
bool operator>=(Complex);
Complex operator[](int);
void operator()();
private:
int realNum, imaginaryNum;
};
/***** main ******/
int main()
{
srand(time(NULL));
Complex com1(3,4);
Complex com2;
cout << "Write com2 : ";
cin >> com2;
cout << "com1 : " << com1 << endl;
cout << "com2 : " << com2 << endl;
cout << "(++com1) + com2 " << (++com1) + com2 << endl;
cout << "(com1++) + com2 " << (com1++) + com2 << endl;
cout << "com1 + com2 " << com1 + com2 << endl;
cout << "com1 - com2 " << com1 - com2 << endl;
cout << "com1 * com2 " << com1 * com2 << endl;
cout << "com1 / com2 " << com1 / com2 << endl;
cout << "com1 += com2 "<< endl;
com1 += com2;
cout << "com1 : " << com1 << " com2 : " << com2 << endl;
cout << "com1 -= com2 " << endl;
com1 -= com2;
cout << "com1 : " << com1 << " com2 : " << com2 << endl;
cout << "com1 *= com2 " << endl;
com1 *= com2;
cout << "com1 : " << com1 << " com2 : " << com2 << endl;
cout << "com1 /= com2 " << endl;
com1 /= com2;
cout << "com1 : " << com1 << " com2 : " << com2 << endl;
if(com1 == com2)
cout << "com1 == com2" << endl;
else
cout << "com1 != com2" << endl;
cout << "com1() " << endl;
com1();
cout << "com1 : " << com1 << endl;
cout << "com1[3] " << endl;
com1[3];
cout << "com1 : " << com1 << endl;
return 0;
}
/************ Class Complex *******/
/* Defualt Constructor*/
Complex::Complex()
{
realNum = 0;
imaginaryNum = 0;
}
/* Constructor */
Complex::Complex(int REALNUM, int IMAGINARYNUM)
{
realNum = REALNUM;
imaginaryNum = IMAGINARYNUM;
}
/* Operator Overloading << */
ostream &operator<<(ostream &c,Complex &com)
{
c << com.realNum << ' ' << com.imaginaryNum << 'i';
return c;
}
/* Operator Overloading >>*/
istream &operator>>(istream &c,Complex &com)
{
c >> com.realNum >> com.imaginaryNum;
return c;
}
/* Operator Overloading ++ */
Complex Complex::operator++()
{
this->realNum++;
return *this;
}
/* Operator Overloading -- */
Complex Complex::operator--()
{
this->realNum--;
return *this;
}
/* Operator Overloading ++ */
Complex Complex::operator++(int)
{
int temp = this->realNum;
this->realNum++;
return Complex(temp,this->imaginaryNum);
}
/* Operator Overloading -- */
Complex Complex::operator--(int)
{
int temp = this->realNum;
this->realNum--;
return Complex(temp, this->imaginaryNum);
}
/* Operator Overloading + */
Complex Complex::operator+(Complex &com)
{
Complex temp;
temp.realNum = realNum + com.realNum;
temp.imaginaryNum = imaginaryNum + com.imaginaryNum;
return temp;
}
/* Operator Overloading - */
Complex Complex::operator-(Complex &com)
{
Complex temp;
temp.realNum = realNum - com.realNum;
temp.imaginaryNum = imaginaryNum - com.imaginaryNum;
return temp;
}
/* Operator Overloading * */
Complex Complex::operator *(Complex &com)
{
Complex temp;
temp.realNum = realNum * com.realNum;
temp.imaginaryNum = imaginaryNum * com.imaginaryNum;
return temp;
}
/* Operator Overloading / */
Complex Complex::operator/(Complex &com)
{
Complex temp;
temp.realNum = realNum / com.realNum;
temp.imaginaryNum = imaginaryNum / com.imaginaryNum;
return temp;
}
/* Operator Overloading += */
Complex Complex::operator+=(Complex com)
{
this->realNum += com.realNum;
this->imaginaryNum += com.imaginaryNum;
return *this;
}
/* Operator Overloading -= */
Complex Complex::operator-=(Complex com)
{
this->realNum -= com.realNum;
this->imaginaryNum -= com.imaginaryNum;
return *this;
}
/* Operator Overloading *= */
Complex Complex::operator*=(Complex com)
{
this->realNum *= com.realNum;
this->imaginaryNum *= com.imaginaryNum;
return *this;
}
/* Operator Overloading /= */
Complex Complex::operator/=(Complex com)
{
this->realNum /= com.realNum;
this->imaginaryNum /= com.imaginaryNum;
return *this;
}
/* Operator Overloading = */
Complex Complex::operator=(Complex com)
{
this->realNum = com.realNum;
this->imaginaryNum = com.imaginaryNum;
return *this;
}
/* Operator Overloading == */
bool Complex::operator==(Complex com)
{
if((this->realNum == com.realNum) && (this->imaginaryNum == com.imaginaryNum))
return 1;
else
return 0;
}
/* Operator Overloading != */
bool Complex::operator!=(Complex com)
{
if((this->realNum != com.realNum) && (this->imaginaryNum != com.imaginaryNum))
return 1;
else
return 0;
}
/* Operator Overloading < */
bool Complex::operator<(Complex com)
{
if(this->realNum < com.realNum)
{
if(this->imaginaryNum < com.imaginaryNum)
return 1;
else
return 0;
}
return 0;
}
/* Operator Overloading > */
bool Complex::operator>(Complex com)
{
if(this->realNum > com.realNum)
{
if(this->imaginaryNum > com.imaginaryNum)
return 1;
else
return 0;
}
return 0;
}
/* Operator Overloading <= */
bool Complex::operator<=(Complex com)
{
if(this->realNum <= com.realNum)
{
if(this->imaginaryNum <= com.imaginaryNum)
return 1;
else
return 0;
}
return 0;
}
/* Operator Overloading >= */
bool Complex::operator>=(Complex com)
{
if(this->realNum >= com.realNum)
{
if(this->imaginaryNum >= com.imaginaryNum)
return 1;
else
return 0;
}
return 0;
}
/*
[] make that realNum and imaginaryNum are changed together. And plus indx to realNum and imaginaryNum.
() make that realNum and imaginaryNum have new number randomly.
*/
/* Operator Overloading [] */
Complex Complex::operator[](int indx)
{
cout << "CHANGE!! " << endl;
int temp = realNum;
realNum = imaginaryNum;
imaginaryNum = temp;
realNum += indx;
imaginaryNum += indx;
return *this;
}
/* Operator Overloading () */
void Complex::operator()()
{
cout << "RANDOM!! " << endl;
this->realNum = (rand() % 9 + 1);
this->imaginaryNum = (rand() % 9 + 1 );
}