2014-02-25 207 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」值來比較指向它們的指針,爲什麼您會用'vertex'做不同的操作? – Barmar

回答

0

你不能,謝天謝地。所有的比較運算符對於任何類型的指針都已經有了很好的行爲。除非至少有一個參數是用戶定義的類型,否則不能重載操作符。

+0

那麼那麼如果我需要比較兩個頂點指針,你有什麼建議?我的所有數據結構都必須是頂點對象嗎? – user2782774

+0

@ user2782774:這是一個選項,一般應該是首選。但即使你有指針,你也可以在比較的時候解引用它們。 –

+0

@ user2782774你確定比較指針是你需要的嗎?它看起來不像它(一個常規圖)。正如本傑明所說,你可以採取指針,然後只是取消引用他們來做比較。 – keyser