我想重载+
,这样当我有'迭代器'时,我可以使用+
代替->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
。
答案 0 :(得分:4)
我认为运营商没有被召集
问题是你的例子中的n
是指针(或指针是语义的迭代器),而不是对象。您不能在指针上重载operator +
,只能在对象本身上重载。这就是为什么不调用运算符的原因--C ++有指针运算的内置运算符,这是代码运行时应用的运算符。
要解决此问题,您需要提供自己的迭代器对象,这些对象封装了相应的指针。然后,您可以覆盖迭代器上的operator +
,根据需要遍历列表,并返回指向正确元素的新迭代器。