Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

operator++ для node в List'е

#cpp


template 
class List
{
private:
    struct node
    {
        ITEM item;
        struct node* next;
    };
    node* head;
    ...
}

Надо, чтобы внутри функций классов работало:
node* iter = head;
++iter;

Как перегрузить operator++?    


Ответы

Ответ 1



Как перегрузить operator++? как перенести определение за пределы объявления класса? Это делается за счет введения класса-итератора, например так: template class 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



Хороший пример приведен тут: перегрузка операторов.

Комментариев нет:

Отправить комментарий