2012-04-15 14 views
1

내 < < 연산자가 올바르게 호출되지 않는 경우 약간의 문제가 있습니다.가상 << operator

class SomeInterface 
{ 
    friend std::ostream& operator<<(std::ostream& str, const SomeInterface& data); 

    protected: 
     virtual void print(ostream& str) const = 0; 
}; 

inline std::ostream& operator<< (std::ostream& o, SomeInterface const& b) 
{ 
    b.print(o); 
    return o; 
} 
} 

호출하는 코드는 다음과 같은 : :

SomeInterface* one = new someConcrete(); 
cout << one; 

I 인터페이스에 전화를받을 바라고 된 < < 오버로드 기능이 아닌, 커녕 파견

내가 가진 무엇 통해 파생 클래스.

답변

3

보십시오 : 당신의 operator<<const SomeInterface& 참조를 취하면서

cout << *one; 

귀하의 코드는 포인터을 인쇄하는 요구하고있다.

+0

감사합니다 ... 나는 그것이 같은 주소를 인쇄 한 후에 짐작한다 찌꺼기. –

0

one 유형의 포인터이기 때문에 std::ostream& operator<< (std::ostream& o, void*);으로 전화를 걸고 있습니다.

시도 :

cout << *one; 

이것은 (참고로) 실제 객체 걸리는 과부하를 호출하지 포인터 자체

관련 문제