Как перегрузить оператор разыменования?

0

Как перегрузить оператор разыменования? Как будет выглядеть выражение? Я создаю класс списка, но у меня проблемы с оператором разыменования.

Вот моя функция для перегрузки оператора разыменования

template <typename T>
T List_Iterator<T>::operator *(){
    return current_link->value;
}

Это члены данных в моем классе итератора

private:
      /* Data Members */
    Link<T>* current_link;

Это мой класс ссылок

protected:
    T value;
  • 1
    Это выглядит как правильный синтаксис для меня. Не могли бы вы объяснить, какая у вас проблема?
  • 0
    Вы получаете ошибку? Что не работает, как вы ожидали?
Показать ещё 4 комментария
Теги:
class

2 ответа

5

Вы должны вернуть ссылку, а не копию:

T& List_Iterator<T>::operator *() { .... }

В противном случае семантика вводит в заблуждение: вы не можете изменить объект, который вы "де-ссылки".

  • 0
    Dat это то, что я искал. спасибо друг.
0

Вы также можете вернуться по адресу. Легче написать a->b чем (*a).b:

T* operator->() {
    return &current_link->value;
}

Вам наверняка понадобится const-версия вашего итератора, которая в основном будет делать то же самое, что и первая, с версиями const операторов "разыменования".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню