在指针上重载操作符++

Overload operator++ on pointers

本文关键字:操作符 重载 指针      更新时间:2023-10-16

我有一个类:

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;返回*;}//其他类成员};