我有一门课:
class Name {
public:
int key;
Name* next;
}
我如何编写operator++
,以便当p
为"Node* p"
时,如果我编写"p++"
,它将执行"p = p->next"
?
期待你的谢意,马龙。
发布于 2014-05-06 00:26:49
你不能,也不应该,因为这是违反直觉的。
关于拥有这样的对象的数组的事情:
Name names[42];
Name* p = names;
p++;
p
现在应该指向数组中的第二个元素(即names[1]
),而不是指向names[0]
持有的任何内容。
如果一个对象持有指向下一个对象的指针,那么将++
应用于该对象本身(而不是指针),最多只能得到下一个对象。
发布于 2014-05-06 00:29:04
答案很简单:你不能!重载始终至少涉及一个用户定义类型。指针始终被视为内置类型,即使它们指向用户定义的类型。您将需要创建一个合适的类来创建迭代器。
发布于 2014-05-06 00:35:43
除了Luchian Grigore所说的之外,标准库中的迭代器就是您想要实现的目标。如果您想为您的类提供迭代器,那么将operator++
添加到迭代器将是有意义的。
https://stackoverflow.com/questions/23477199
复制相似问题