Как перегрузить оператор разыменования? Как будет выглядеть выражение? Я создаю класс списка, но у меня проблемы с оператором разыменования.
Вот моя функция для перегрузки оператора разыменования
template <typename T>
T List_Iterator<T>::operator *(){
return current_link->value;
}
Это члены данных в моем классе итератора
private:
/* Data Members */
Link<T>* current_link;
Это мой класс ссылок
protected:
T value;
Вы должны вернуть ссылку, а не копию:
T& List_Iterator<T>::operator *() { .... }
В противном случае семантика вводит в заблуждение: вы не можете изменить объект, который вы "де-ссылки".
Вы также можете вернуться по адресу. Легче написать a->b
чем (*a).b
:
T* operator->() {
return ¤t_link->value;
}
Вам наверняка понадобится const-версия вашего итератора, которая в основном будет делать то же самое, что и первая, с версиями const
операторов "разыменования".