2014-03-07 2 views
0

"->"오버로드 예제를 얻으려고합니다. 자습서에 따라 서명은 a -> b를 반영하는 A :: operator ->()입니다.연산자 -> 오버로드 예제

기능이 어떤 멤버를 조작해야하는지 어떻게 식별합니까?

나는 클래스, 객체 또는 참조에 대한 포인터를 반환 할 수 있다고 가정합니다. 이에 대한주의 사항은 무엇입니까? 스마트 포인터 속성 등의 처리.

+0

마지막 단락을보다 정확하게 사용할 수 있습니까? – Brian

+0

'operator ->()'구현은 어떤 멤버가 조작되고 있는지 상관하지 않습니다. 그냥'T *'를 반환 할 것이고'T'가 b라는 멤버를 포함하면 코드는 컴파일 될 것입니다. – Praetorian

답변

1
template<class T> 
class PointerObject 
{ 
public: 
    PointerObject(T* p) 
     : _p(p) 
    {} 

    T* operator ->() 
    { 
     return _p; 
    } 

private: 
    T* _p; 
}; 

struct A 
{ 
    int x, y; 
}; 

int main() 
{ 
    A a; 
    PointerObject<A> po(&a); 
    po->x = 1; 
    po->y = 1; 
}