【发布时间】:2015-02-04 09:19:41
【问题描述】:
对于我的家庭作业,我必须创建一个 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;
最后一部分是节点的结构体,以及这个类的任何对象都会有的两个变量。
谢谢
【问题讨论】:
-
你服从the rule of three吗?实际复制列表还是只复制指针?
-
重现问题的邮政编码...
-
+看起来不错。如果复制构造有效,则问题出在赋值运算符上。 -
至少显示
operator=和operator+=以及copy-constructor和类定义 -
我们仍然需要一个 MCVE 来解决这个问题。见stackoverflow.com/help/mcve
标签: c++ linked-list operator-overloading