Shift operator- cout, cin 쓸때 앞이나 뒤에 붙이는 연산자
- 표준 라이브러리에 std라는 namespace에 cout이나 cin에 관련된 클래스(istream, ostream)
- C++에서는 쉬프트 연산자도 연산자 오버로딩이 가능
Shift operator overloading
-----------------------------
int main()
{
VALUE val(2,3);
std::cout << val;
return 0;
}
1. VALUE class show x and y value.
2. create val Object. after, std::cout print val .
Error :
cout : - possible normal data type printing
- impossible object of user type
-표준 std의 ostream 클래스에서도 쉬프트 연산에 대한 오버로딩이 정의 되어 있지 않음
따라서, 표준 라이브러리로 객체를 출력하는 일 불가능
-> Solution
overloading of member fucntion
cout is cout.operator
cout.operator<< (val)
val 객체 인자값을 받을 수 있도록 cout 객체에는 operator<< 연산자를 오버로딩 시키면 가능
class VALUE{
private:
int iX;
int iY;
public:
VALUE(int x=0, int y=0):iX(x), iY(y){}
friend ostream& operator<<(ostream& os, const VALUE& val);
};
ostream& operator<<(ostream& os, const VALUE& val)
{
os<<"["<<val.iX<<", "<<val.iY<<"]"<<endl;
return os;
}
int main(void)
{
VALUE val(2, 3);
std::cout<<val;
return 0;
}
member func overloading : CHANGE std::cout<<val; to operator(std::cout, VALUE);
NO logical problem.