2012. 2. 11. 16:37
//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 );
}

'Code > c/c++' 카테고리의 다른 글

[C++]Double Linked List 기본기능만  (0) 2011.12.23
[C++]Game of Snake.  (0) 2011.09.03
[C++]poker  (0) 2011.09.03
[Code] 유클리드 알고리즘(Euclid Algorism)  (0) 2011.08.29
[C++ Code]Swap  (0) 2011.07.28
Posted by I_co