在指针上重载operator ++

时间:2014-05-05 16:22:45

标签: c++ class pointers operator-overloading

我有一个班级:

class Name {
public:
    int key;
    Name* next;
}

我如何撰写operator++,以便p "Node* p" "p++"如果我写"p = p->next"它会{{1}}?

期待的感谢, 栗子。

4 个答案:

答案 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
};