cout 연산자 오버로딩에서 '전역함수'에 의한 오버로딩이 필요한 이유가 뭔가요?

조회수 915회

<< 연산자의 오버로딩에 대한 부분을 읽던 중,

사용자가 정의한 class에 대해선 << 연산자 오버로딩을 하기 위해선 '전역함수'에 의한 오버로딩을 해야한다고 합니다.

하지만, 저는 이 이유에 대해서 명확하게 이해가 되지를 않네요..... ㅠㅠ 즉, 사용자 정의 클래스 Point에 대해서 그 인스턴스 p를 cout에 쓰려면

cout<<p;
cout.operator<<(p); // x
operator<<(cout, p); // ok

// 전역함수
otsream& operator <<(ostream& os, Point p);

와 같다네요, 이걸 전역함수로 선언해서 쓰니까 friend 키워드가 붙는건 당연하니까 이해가 되는데,

(1) 왜 멤버함수로 쓰지 않고, 전역함수로 쓰는지

(2) 왜 멤버함수일 때와 다르게, operator 원형에 파라미터가 2개인지(ostream&, Point)

이 두 가지가 이해가 안 되네요... 도와주세요!!

  • 현재 보고 있는 사이트

(1) https://boxbop.tistory.com/66

(2) http://www.parkjonghyuk.net/lecture/program2/chap10.pdf -> 28p

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)