[英]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.