如何重载引用运算符?

时间:2014-02-24 06:43:01

标签: c++ class

如何重新设置取消引用运算符?宣言会是什么样子?我正在创建一个列表类,但我在解除引用运算符时遇到问题。

这是我重载引用运算符的函数

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

这是我的迭代器类中的数据成员

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

这是我的链接类

protected:
    T value;

2 个答案:

答案 0 :(得分:6)

您应该返回引用,而不是副本:

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

否则语义会令人困惑:您无法修改“取消引用”的对象。

答案 1 :(得分:0)

您也可以按地址退货。写a->b(*a).b更容易:

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

你肯定需要一个你的迭代器的const版本,它基本上和第一个版本一样,使用“解除引用”运算符的const版本。

相关问题