1

我想重载+,这样当我有“迭代器”时,我可以使用+而不是->next.

我的意思是,如果我有类似的东西:

mylist<int>::iterator n = test.begin();
n = n->next;

我想使用 . 转到列表中的下一个元素n = n + 1

我试图在我的节点类中重载运算符。

mynode* operator+(size_t n) {
    size_t cnt = 0;
    mynode* count = this;
    while(cnt != n) {
        ++cnt;
        count = count->next;
    }
    return count;
}

在我的列表类中,我有typedef mynode<T>* iterator.

4

1 回答 1

4

我认为操作员没有被调用

问题是n在您的示例中是指针(或具有指针语义的迭代器),而不是对象。您不能重载operator +指针,只能重载对象本身。这就是为什么不调用运算符的原因——C++ 具有用于指针运算的内置运算符,这是在代码运行时应用的。

要解决此问题,您需要提供自己的迭代器对象,这些对象封装了相应的指针。然后,您将能够覆盖operator +迭代器上的 ,根据需要遍历列表,并返回一个指向正确元素的新迭代器。

于 2013-11-10T23:07:01.457 回答