【问题标题】:Overloading comparison operators for stacks重载堆栈的比较运算符
【发布时间】:2013-10-24 20:08:14
【问题描述】:

我需要一些帮助:我被要求对 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);

};

【问题讨论】:

  • 关于运算符重载你想知道的一切都是here
  • " 我只是在编写定义时遇到了麻烦" 你试过什么?什么地方出了错?你能告诉我们错误信息吗?
  • 是的,我试过这样,返回 stack1 == stack2
  • @Nicholas 这会创建一个无限循环(或无限递归),对吧?您需要通过以正确的方式比较类的成员来实现它。一旦你成功实现了==,当你想实现!=,记住a!=b应该和!(a==b)一样。祝你好运!
  • 一个重载的操作符可以返回任何东西。你可以只写friend bool operator == (const Stack &amp;stack1, const Stack &amp;stack2) { return true; },但这不会很有用。例如,如果运算符返回 true 当且仅当两个堆栈具有相同数量的元素,并且堆栈 1 的元素编号 #i 等于堆栈 2 的元素 #i(对于从 0 到元素总数)。

标签: c++ stack operator-overloading friend-function


【解决方案1】:

这实际上取决于您实际想要比较的内容。是堆栈的标识还是堆栈上的元素数量?由于您要定义越来越小的运算符,因此我假设您要比较堆栈中的元素数量。

等号运算符是这样的:

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

当然,您需要考虑 Stack 对象的列表成员为 NULL 的情况。

【讨论】:

  • 是的,你是对的,我想比较元素的数量。
  • 有几种可能的比较,你可以比较堆栈是同一个对象,元素的数量是否相同,堆栈元素匹配较小堆栈的大小,或者堆栈完全匹配。
猜你喜欢
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多