我对operator []和operator =的对齐有问题。 我无法理解准确地编写函数LinkedList LinkedList :: operator =(const int& n)。它看起来不像我遇到的任何操作员=。 请帮助我了解它的性质(尽可能与代码一起)。非常感谢!
档案.h
class LinkedList
{
private:
Node* pHead;
Node* pTail;
int curN;
public:
int& operator[](const int& i);
LinkedList operator = (const int& n);//
};
档案.cpp
int& LinkedList::operator[](const int& i)
{
int tmp;
if (i < 0)
tmp = 0;
else if (i > this->curN)
tmp = this->curN - 1;
else
tmp = i;
int count = 0;
Node* pNode = this->pHead;
while (count < tmp)
{
count++;
pNode = pNode->pNext;
}
return pNode->_data;
}
LinkedList LinkedList::operator=(const int& n)
{
//Problem here
}
并提交main.cpp
int main()
{
srand(1234);
LinkedList l;
l[-1] = 9000;
l[4] = 2000;
l[100] = 10000;
cout << l << endl;
}
答案 0 :(得分:0)
operator=
适用于您的对象,不适用于其内容。
在这种情况下,LinkedList::operator=(const int& n)
被称为:
LinkedList l;
l = 5;
在这种情况下,只调用LinkedList::operator[]
。
l[4] = 2000;
答案 1 :(得分:0)
您的赋值运算符需要位于Node类中,而不是列表类。
您正在分配节点。要调用列表类赋值运算符,您必须执行以下操作:
l = LinkedList();
(但那不是你想要的)
答案 2 :(得分:0)
l[-1] = 9000;
l[4] = 2000;
l[100] = 10000;
在这行代码中,LinkedList::operator=(const int& n)
将不会被调用,因为LinkedList::operator[](const int& i)
返回对int的引用。
您要做的是在LinkedList::operator[](const int& i)
上返回一个节点,并在那里定义您自己的operator=
。
Node& LinkedList::operator[](const int& i)
{
int tmp;
if (i < 0)
tmp = 0;
else if (i > this->curN)
tmp = this->curN - 1;
else
tmp = i;
int count = 0;
Node* pNode = this->pHead;
while (count < tmp)
{
count++;
pNode = pNode->pNext;
}
return *pNode;
}
///Your node class
class Node
{
public:
int _data;
Node& operator=(const int data)
{
_data = data;
return *this;
}
}
修改:
确保将pNode放置在稍后可以删除的位置以避免内存泄漏。