Programming/C++
cout, cin 그리고 endl의 정체
scii
2012. 8. 30. 16:18
Consol out, Consol In, End line
cout과 endl 직접 구현하는 예제.
이 예제는 cout<<"wer"<<12123<<endl; 이런 식으로 할 수가 없다 .그래서 이런 연산을 가능케 하기위해 바꿔야 한다.
cout은 ostream 클래스의 객체이다.
ostream은 이름공간 std 안에 선언되어 있다.
만약....
int main(void)
{
Point pos(3, 5);
cout<<pos<<endl; //3, 5 출력.
...
}
이런 유형의 연산이 가능하게 하고자 한다.
이것이 가능하기 위해선 << 연산자가 오버로딩 되어 있어야 한다. 그리고 만약 멤버함수의 형태로 오버로딩을 한다면, 다음과 같이 해석이 가능해야 하고,
cout.operator<<(pos);
전역함수의 형태로 오버로딩을 한다면, 다음과 같이 해석이 가능해야 한다.
operator<<(cout, pos);
어떠한 방법을 선택해야 하는가...?
# 멤버함수에 의한 방법을 선택하면 cout 객체의 멤버함수를 하나 추가해야 하므로, ostream 클래스를 정정해야 한다. 그런데 이는 불가능한 방법이다.
# 전역함수에 의한 방법을 택하는 수밖에 없다. 때문에 전역함수로 정의해야 한다.
&ostream operator<<(ostream &os, const Point &pos) { ... }