2013-10-24 196 views
0

我需要一些幫助:我被要求爲2堆棧的比較運算符做一些重載。我把語法弄清楚了,我在編寫定義時遇到了麻煩。所以請幫助我。重載堆棧的比較運算符

至少有一個操作符重載,然後我會爲其餘的操作。

struct linklist 
{ 
    int no; 
    struct linklist *next; 
}; 

class Stack 
{ 
private: 
    linklist *list,*head; 

public://constructor and destructor 
    Stack(); 
    ~Stack(); 
public:// main functions 
    void push(); 
    void show(); 
    void pop(); 

public://overloaded operations 

    friend bool operator == (const Stack &stack1, const Stack &stack2); 
    friend bool operator != (const Stack &stack1, const Stack &stack2); 
    friend bool operator < (const Stack &stack1, const Stack &stack2); 
    friend bool operator > (const Stack &stack1, const Stack &stack2); 

}; 
+2

你想知道的關於運算符重載的一切是[here](http://stackoverflow.com/questions/4421706/operator-overloading) – Kunal

+0

「我只是在編寫定義時遇到了麻煩」你試過了什麼?什麼地方出了錯?你能告訴我們一個錯誤消息嗎? – dyp

+0

是的,我嘗試這樣,返回stack1 == stack2 – Nicholas

回答

1

這實際上取決於你實際想要比較什麼。它是堆棧的身份還是堆棧上的元素數量?既然你想定義更小更大的運算符,我假設你想比較堆棧中元素的數量。

平等運營商將是這樣的:

bool operator==(const Stack &stack1, const Stack &stack2) 
{ 
    return stack1.list->no == stack2.list->no; 
} 

當然,你需要考慮的情況下,一個Stack對象名單成員是空值。

+0

是的,你是對的,我想要比較元素的數量 – Nicholas

+0

有幾種可能的比較,您可以比較堆棧是相同的對象,元素的數量是相同的,堆棧元素匹配較小堆棧的大小,或堆棧匹配exact1年。 – ChuckCottrill