cout, cin 그리고 endl의 정체
Programming/C++ 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) { ... }
'Programming > C++' 카테고리의 다른 글
디폴트 대입 연산자의 문제점 (0) | 2012.09.11 |
---|---|
대입 연산자의 오버로딩2 (0) | 2012.09.10 |
교환법칙 문제의 해결 (0) | 2012.08.28 |
전위증가와 후위증가의 구분 (0) | 2012.08.27 |
단항 연산자의 오버로딩 (0) | 2012.08.27 |