簡體   English   中英

指針重載運算符++

[英]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++是有意義的。

您可以按照以下方式進行操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM