我有一个班级:
class Name {
public:
int key;
Name* next;
}
我如何撰写operator++
,以便p
"Node* p"
"p++"
如果我写"p = p->next"
它会{{1}}?
期待的感谢, 栗子。
答案 0 :(得分:6)
你不能,也不应该,因为这是违反直觉的。
关于拥有这样一个对象的数组:
Name names[42];
Name* p = names;
p++;
p
现在应指向数组中的第二个元素(即names[1]
),而不是names[0]
所持有的任何内容。
如果一个对象持有指向下一个对象的指针,那么最好将++
应用于对象本身(而不是指针)应该为您提供下一个对象。
答案 1 :(得分:3)
答案很简单:你做不到!重载总是涉及至少一个用户定义的类型。指针始终被视为内置类型,即使它们指向用户定义的类型。您需要创建一个合适的类来创建迭代器。
答案 2 :(得分:1)
除了Luchian Grigore所说的,标准库中的迭代器完全解决了您要完成的任务。如果要为类提供迭代器,将operator++
添加到迭代器是有意义的。
答案 3 :(得分:0)
你可以通过以下方式完成。
class Students { private: class Name { public: int key; Name* next; }; Name *head = {}; Name *current = {}; public: Students & operator ++() { if ( current ) current = current->next; return *this; } // other class members };