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) { ... }