在指针上重载操作符++
Overload operator++ on pointers
我有一个类:
class Name {
public:
int key;
Name* next;
}
我怎么写operator++
,这样当p
是"Node* p"
时,如果我写"p++"
,它就会是"p = p->next"
?
预期的谢谢,栗色的。
你不能,也不应该,因为这是违反直觉的。
关于拥有这样一个对象数组的事情:
Name names[42];
Name* p = names;
p++;
p
现在应该指向数组中的第二个元素(即names[1]
),而不是names[0]
所保存的元素。
如果一个对象持有指向下一个对象的指针,那么最好对对象本身(不是指针)应用++
,应该会给出下一个对象。
答案很简单:你不能!重载总是涉及至少一个用户定义的类型。指针总是被认为是内置类型,即使它们指向用户定义的类型。您需要创建一个合适的类来创建迭代器。
除了Luchian Grigore所说的,标准库中的迭代器可以精确地解决您想要完成的任务。如果你想为你的类提供一个迭代器,将operator++
添加到迭代器中是有意义的。
你可以这样做。
<>之前类学生{私人:类名{公众:int的关键;*下名称;};Name *head = {};Name *current = {};公众:学生& operator ++(){If (current) current = current->next;返回*;}//其他类成员};