2013-10-24 95 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