2014-09-12 3 views
0

여기에 루프를 통해 지시를받은 지시 사항이 있습니다. 객체 datamembers를 출력하기 위해 삽입 연산자를 오버로드해야합니다. 그러나 오버로더는 친구가 아닌 도우미 연산자 여야합니다.비동기 도우미 연산자로 cout 오버로드

그렇다면 개인 데이터 멤버가 '친구'가 아닌 경우 어떻게 액세스 할 수 있습니까? 이것이 가능하다면 '친구'를 사용하지 않는 이유는 무엇입니까? 여기

는 단어를 단어를 말하는 것입니다 :

  • 왼쪽 ostream에 피연산자에 저장된 문자열을 삽입 도우미가 아닌 친구 연산자.
    이 연산자는 삽입의 수에 문자열을 서문 나는 그래서 난 정말 도움을 주셔서 감사합니다 C++ 다소 새로운 해요 그 숫자

를 증가.

답변

3

친구가 아닌 경우 개체의 공용 인터페이스 (즉, 삽입 연산자에서 요구하는 액세스를 포함하도록 개체의 공용 인터페이스를 작성해야 함)를 사용해야합니다.

예를 들어, 당신은 같은 것을 할 수 있습니다 나는 확실히이 좋은 연습 추천 하지 해요

class thing { 
    std::string name; 
public: 
    std::string get_name() const { return name; } 
    // ... 
}; 

std::ostream &operator<<(std::ostream &os, thing const &t) { 
    return os << t.get_name(); 
} 

주 - 오히려 반대로, 나는 그것이 자주 더 좋은 생각 인 것 같아요 삽입 연산자가 친구가 될 수 있습니다. 그러나 당신이 수업을 듣고 있고 올바른 방법으로 일하는 것이 금지되어 있다면, 당신은해야 할 일을해야합니다 ...

+0

나는 뭔가 다른 것 같아요. 내가 그 일을 정확히 어떻게 할 것인가? – Kris

+0

@SomeDeveloper : 예제를 추가했습니다. –

+0

감사합니다. 제리 톤. 네, 이상하게 보입니다. 그러나 슬프게도, 나는 적절한 관행을 시행하기보다는 사람들의 사고를 얻는 것만으로 생각합니다. 당신의 도움을 주셔서 감사합니다! – Kris