2012-04-15 5 views
-3

유권자 : 나는 이것이 잘못 구성된 질문이라는 것을 알고 있습니다. 답을 아래로 스크롤하면 문제의 원인을 발견하게됩니다. 질문 자체가 도움이되지 않을 수도 있지만 답변을 통해 조작자 오버로딩과 비슷한 문제가 발생하는 데 도움이되기를 바랍니다. 문제는 그 것이었다. 나는 이것이 더 나은 질문이 될 편집이나 수정을 확인할 수 없다. 따라서 아래 표를 제출하려면 건설적인 의견을 추가하십시오. 고맙습니다.오버로드 됨 << 운영자 인쇄 주소

ostream& operator << (ostream& s, myObject o) 
{ 
    s << doStuff(o, s) << endl; 
    return s; 
} 

예상 출력 :

object contents 


나는

myObject o = myObject(); 
cout << o << endl; 

내가 (friend) < < 운영자가 여기에 과부하가 다음 코드를 실행 해요

5452ED48object contents 

이유 :

실제 출력은 메모리 주소를 포함, 어떤 이유입니까?

+3

'doStuff() '란 무엇입니까? 그건 그렇고. 그 모든 것을 두드리는 "myObject o = myObject();" 사업. "myObject o;" 충분하다. –

+0

@BenjaminLindley : myObject가 POD 인 경우'myObject o'가 충분하지 않을 수 있습니다. – Nawaz

+1

폐쇄에 대한 투표 정보가 충분하지 않습니다. – Nawaz

답변

0

불충분 한 세부 정보를 제공하지 못해 죄송합니다.

doStuff(o, s); 
return s; 

는 분명히 이미 주소를 포함 s에 원하는 출력을 추가했다 : 그것은 내가 이런 짓을 한 것이 밝혀졌다.

0

우리는 나는 이런 식으로 뭔가 이해 ... 당신이 할 싶어 이해 할 수 없습니다

#include <iostream> 
using namespace std; 

class obj{ 

    friend ostream&operator<<(ostream &out, const obj o); 
public: 
    obj(int a); 
    int change_data(); 
private: 
    int s; 
    int d; 

}; 

obj::obj(int a) 
{ 
    s = a; 
    d = s; 
} 

int obj::change_data() 
{ 
    return 99; 
} 

ostream&operator<<(ostream &out, const obj o){ 
    out << o.s; 
    out << " "; 
    out << o.d; 
} 

int main(int argc, char **argv) { 
    obj some(1); 
    cout << some; 
    return 0; 
} 

출력은 : 당신이 배울 필요에

1 일

것 같다을 "< <"연산자를 오버로드하면 값을 반환하지 않기 때문에 값을 참조로 전달하는 방법에 대한 논쟁 거리.