2014-02-25 5 views
0

두개의 버텍스 포인터를 비교할 수 있도록 연산자를 어떻게 오버로딩합니까?C++의 비교 연산자 오버로딩

class graph 
{ 
private: 
class vertex; 
class edge; 

class vertex 
{ 
public: 
    int index; 
    int estDistanceToGoal; 
    int traveledDis; 
    string location; 

다음은> 연산자를 오버로드 한 예입니다. 버텍스 개체를 버텍스 포인터와 비교할 때이 메서드는 트리거에서이 메서드입니다.

bool operator> (vertex* v) 
    { 
        cout<<"we did this"<<endl; 
     return (this->weight > v->weight); 
    } 

다음은 테스트 용 예제입니다. 버텍스 객체와 버텍스 포인터를 비교한다면 "우리가 해냈습니다"라고 인쇄 할 것입니다. 그렇다면 어떻게하면 두 개의 정점 포인터를 비교할 수 있을까요? "이"를 존경 해 주실 수 있습니까?

void test() 
{ 
    vertex*a = new vertex("wj",5); 
    vertex*v = new vertex("something",2); 

    if(a == v) 
    { 
     cout<<"what"<<endl; 
    } 
    else 
    { 
     cout<<"k"<<endl; 
    } 
} 
+0

'if (* a <* v)'와 같은 정점 자체를 비교하고 비교 객체를 정의하여 정점 인수를 취해야합니다. – Barmar

+0

포인터를 비교하여 두 개의 'int'값을 비교할 수 있다고 기대하지 않을 것입니다. 왜 '꼭짓점'을 다르게 할 것입니까? – Barmar

답변

0

감사합니다. 모든 비교 연산자는 이미 모든 유형의 포인터에 대해 잘 설정된 동작을 가지고 있습니다. 그리고 적어도 하나의 매개 변수가 사용자 정의 유형이 아니라면 연산자를 오버로드 할 수 없습니다.

+0

그러면 두 개의 버텍스 포인터를 비교해야한다면 어떻게해야합니까? 내 모든 데이터 구조가 대신 정점 개체가되어야합니까? – user2782774

+0

@ user2782774 : 그건 선택 사항이고 일반적으로 선호해야하는 옵션입니다. 그러나 포인터가 있더라도 비교 시점에 항상 포인터를 참조 해제 할 수 있습니다. –

+0

@ user2782774 필요한 포인터를 비교하고 있습니까? 그것은 그 것처럼 보이지 않습니다 (정규 그래프). Benjamin이 말했듯이, 포인터를 가져 와서 비교를하기 위해 그들을 참조 할 수 있습니다. – keyser