#cpp
templateclass List { private: struct node { ITEM item; struct node* next; }; node* head; ... } Надо, чтобы внутри функций классов работало: node* iter = head; ++iter; Как перегрузить operator++?
Ответы
Ответ 1
Как перегрузить operator++? как перенести определение за пределы объявления класса? Это делается за счет введения класса-итератора, например так: templateclass List{ ... class Iterator{ node*ptr; ... Iterator( node*ptr = NULL ) : ptr( ptr ){} ITEM*operator->( void ){ return &ptr->item; } iterator&operator++( void ){ ptr = ptr->next; return *this; } iterator operator++( int ){ node*result; // result = ptr; ptr = ptr->next; return result; } ... }; iterator begin( void ){ return head; } ... }; Здесь Iterator - класс-обертка над указателем node*, у которого есть перегруженные операторы -> и оба ++. В программе вместо node* нужно будет просто использовать Iterator, тогда он будет работать как ожидалось, с плюсами. Ответ 2
Хороший пример приведен тут: перегрузка операторов.
Комментариев нет:
Отправить комментарий