使用单链表重载 + 运算符



对于我的家庭作业,我必须创建一个 int 链表。我有复制构造函数和赋值运算符重载,但似乎可以让 + 运算符重载。我有一个定义的析构函数来清除列表。

List List::operator+(const List &add)
{
     List result;
     result += *this;
     result += add;
     return result;
}

+= 正在工作。另外,当我执行以下操作时: 列表列表 3 = 列表 1 + 列表 2;它有效。似乎析构函数在返回之前就被调用了,所以如果我这样做,我对 List3 一无所获

List list3;    
list3 = list1 + list2;

下面是复制构造函数、赋值重载和 += 重载

List& List::operator=(const List &assign)
{
    Node *traverse = assign.head;
    int x;
    int *passX = &x;
    while (traverse != nullptr)
    {
        x = traverse->getItem();
        this->Insert(passX);
        traverse = traverse->getNext();
    }
    return *this;
}
List342& List342::operator+=(const List342 &add)
{
    Node *traverse = add.head;
    int x;
    int *passX = &x;
    while (traverse != nullptr)
    {
        x = traverse->getItem();
        this->Insert(passX);
        traverse = traverse->getNext();
    }
    return *this;
}
List342::List342(const List342 &copy)
{
    *this = copy;
}
struct Node
    {
        int item;
        Node *next = nullptr;
        int getItem() const;
        Node* getNext() const;
        void setItem(const int &val);
        void setNext(Node* nodePtr);
    };
    Node *head;
    int itemCount;

最后一部分是节点的结构,以及此类的任何对象将具有的两个变量。

谢谢

所以我设法弄清楚了这一点

List& List::operator+(const List &add)
{
    List *result = new List;
    *result = *this;
    *result += add;
     return result;
}

我的析构函数在返回之前正在清除列表...在堆中分配空间可防止析构函数执行此操作。

感谢大家的帮助!

很好地将运算符+实现为运算符+=的函数。但是,在重载运算符 + 时,应同时声明 LHS 和 RHS 常量。

const List List::operator+(const List &add) const
{
     List result;
     result += *this;
     result += add;
     return result;
}

第一个 const 表示该函数返回一个 const List,因此您不能:

List A, B, C;
A + B = C;

第二个意味着函数不会修改其成员变量,因此您可以相信 A+B 不会修改 A。

假设默认构造函数是一个空列表,并且您的类不使用指针,请尝试正确声明 const。常量变量的作用域与非常量变量的作用域不同。如果您的类使用指针,请确保您实际上是在复制相关内存,而不仅仅是内存地址。

相关内容

  • 没有找到相关文章

最新更新