如何使用operator []与operator =?

时间:2016-10-30 10:07:45

标签: c++

我对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;
    }

3 个答案:

答案 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放置在稍后可以删除的位置以避免内存泄漏。