对于我的家庭作业,我必须创建一个 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 ©)
{
*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。常量变量的作用域与非常量变量的作用域不同。如果您的类使用指针,请确保您实际上是在复制相关内存,而不仅仅是内存地址。