2010-12-03 13 views
5

이와 같이 cout을 사용하려면 : std :: cout < < myObject 왜 ostream 객체를 전달해야합니까? 나는 그것이 내재적 인 매개 변수라고 생각했다. 그 클래스를 재정의 필요하기 때문에연산자 << 오버로드 ostream

ostream &operator<<(ostream &out, const myClass &o) { 

    out << o.fname << " " << o.lname; 
    return out; 
} 

감사

답변

5

당신은, ostream 또 다른 멤버 함수를 추가하지 않습니다. ostream이 먼저 나옴에 따라 myClass에 추가 할 수 없습니다. 당신이 할 수있는 유일한 방법은 독립 함수에 오버로드를 추가하는 것입니다.

+0

+1 질문하지 않은 것에 대한 좋은 공제 int 질문 –

-1

회원 기능이 아니기 때문에 무료 기능이 오버로드되고 있습니다.

2

그렇지 않으면 첫 번째 인수가 될 클래스의 멤버 함수 인 경우에만. 따라서, 다음과 같습니다

class ostream { 
    ... 
    ostream &operator << (const myClass &o); 
    ... 
}; 

ostream 때문에 긴 기록 된 수업 전에, 당신은 거기에 당신의 클래스를지고의 문제를 참조하십시오. 따라서, 우리는 독립형 함수 연산자를 구현해야

연산자는 클래스의 멤버 함수에 대해, 좌측이 this이고 인수 오른쪽대로 구현
(return type) operator << ((left hand side), (right hand side)); 

. (이진 연산자의 경우 단항 연산자도 비슷하게 작동합니다.)

관련 문제