6. http://blog.naver.com/ruvendix
관계 연산자 오버로딩
class CTest
{
int iNum;
bool CTest operator <(const CTest &rTest)
{
return (iNum < rTest.iNum);
}
};
CTest CTest1, CTest2;
CTest1 < CTest2; // 이게 가능함
<, <=, >, >=, == , !=은 오버로딩 형식이 동일
7. http://blog.naver.com/ruvendix
증감 연산자 오버로딩
class CTest
{
int iNum;
CTest &operator ++(void) // 전위 증가 연산자
{
iNum++;
return *this;
}
CTest operator ++(int) // 후위 증가 연산자
{
CTest Temp = *this;
iNum++;
return Temp;
}
};
전위 증감과
후위 증감은
서로 다름!
8. http://blog.naver.com/ruvendix
대입 연산자 오버로딩
class CTest
{
int iNum;
CTest &operator =(const CTest &rTest)
{
if (this != &rTest)
{
iNum = rTest.iNum;
}
return *this;
}
};
대입 연산자는 기본 대입 연산자가 있지만!
얕은 복사를 해결하려면 오버로딩해야 함!
대입 연산자는
메서드로만
오버로딩 가능!
복합 대입 연산자는
둘 다 가능!
9. http://blog.naver.com/ruvendix
배열 첨자 연산자 오버로딩
class CTest
{
int NumList[10];
const int &operator [](const int iIndex)
{
return NumList[iIndex];
}
};
CTest Test;
Test[2];
배열 첨자 연산자를 오버로딩하면
배열이 아닌데도 배열 첨자 연산자 사용 가능!
배열 첨자 연산자는
메서드로만
오버로딩 가능!
10. http://blog.naver.com/ruvendix
-> 연산자 오버로딩
class CPosition
{
void PrintPosition(void) const;
};
class CTest
{
CPosition Pos;
const CPosition *operator ->(void) const
{
return &Pos;
}
};
CTest Test;
Test->PrintPosition();
-> 연산자를 이용하면 필드에 좀 더 편하게 접근할 수 있음!
-> 연산자는
메서드로만
오버로딩 가능!
11. http://blog.naver.com/ruvendix
함수 호출 연산자 오버로딩
class CTest
{
int iNum;
const int operator ()(int iAdd)
{
return (iNum + iAdd);
}
};
CTest Test;
Test(10);
함수 호출 연산자를 오버로딩하면 객체를 함수처럼 사용할 수 있음!
그래서 함수 객체(Functor)라고 함!
() 연산자는
메서드로만
오버로딩 가능!
12. http://blog.naver.com/ruvendix
cout 오버로딩
class CTest
{
friend ostream &operator <<(ostream &rCout, const Ctest &rTest);
int iNum;
};
ostream &operator <<(ostream &rCout, const Ctest &rTest)
{
rCout << rTest.iNum << endl;
return rCout;
}
CTest Test;
cout << Test; // 이게 가능
cout은 오버로딩해서 사용하는 경우가 많음!
cin을 오버로딩할 때는 istream을 이용해야 함!
cout 연산자는
외부 함수로
오버로딩하는 게
편함!