2008. 8. 24. 23:02

<stdio.h> 보다는 <iostream>을 사용한다

int i;
Rational r; // r은 유리수이다.

...
cin >> i >> r;
cout << i << r;

이 코드가 컴파일되기 위해서는 타입 Rational 객체와 동작할 수 있는 함수 oepator >> 와 operator << 가 있어야 한다.

class Rational {

public:

           Rational(int numerator = 0, int denominator = 1);

          

private:

           int n, d; // numerator denominator

           friend ostream & operator(ostream& s, const Rational & r)

           {

                     s << r.n << ‘/’ << r.d;

                     return s;

           }

};


이 버전의 operator << 는 다소 미묘하면서도 중요한 사항을 증명하고 있다.

예를 들어,
oerator<<은 멤버 함수가 아니다.
그리고 출력될 Rational 객체는 객체로서가 아닌 상수 레퍼런스로서 operator<< 에 전달된다.

표준 위원회는 다른 C 비표준 헤더명들을 정리하면서 <iostream>을 찬성하여 <iostream.h>를 없애 버렸다. 만일 여러분의 컴파일러가 <iostream>과 <iostream.h> 양쪽을 모두 지원한다면 헤드들이 미묘하게 차이가 있다는 사실이다. 특히, 만일 #include <iostream>을 이용한다면 네임스페이스 std 내에 위치한 iostream 라이브러리의 구성요소를 얻게 된다. 반면, 만일 #include <iostream.h>을 이용한다면 전역공간에서 그러한 같은 구성요소들을 얻는다. 전영공간에서 그들을 취하는 것은 이름 충돌(name conflict)을 유발시킬 수 있다. 네임스페이스의 이용은 이러한 이름 충돌을 막기 위해 설계되었다.