模板和运算符重载以及迭代器

template and operator overloading and iterator

本文关键字:迭代器 重载 运算符      更新时间:2023-10-16

我被要求编写一个与istream_iterator具有相同功能的迭代器,迭代器的名称为CMistream_iterator。我想设置*运算符的函数,因为它在迭代器中使用。

  template<class T>
    class CMyistream_iterator{
        public:
        T my;
        T* cm;
        CMyistream_iterator(istream& x):my(x){};
        T operator * (CMyistream_iterator<T>& p);
    };
    template<class T>
    T CMyistream_iterator<T>::operator * (CMyistream_iterator<T>& p){return p.my;}
    int main()
    {
        CMyistream_iterator<int> inputInt(cin);
        int n1,n2,n3;
        n1 = * inputInt;
    }

但代码出现错误,并表示"不匹配‘operator*’(操作数类型为CMistream)"。有人能帮我吗?

您的问题与模板无关,而是与运算符重载的基础有关。你需要写简单的

T operator * ();

T CMyistream_iterator<T>::operator * (){
    return my; // meaning this->my
}

原因是由于您的运算符已经是类成员,因此它们已经一个隐式参数——类对象本身,这就是您需要使用的参数。

您编写的代码声明的不是间接运算符(*x),而是乘法运算符(x*y)。

代码中的另一个问题是,您试图在CMyistream_iterator(istream& x):my(x){};中将istream转换为int,但这与您提到的编译错误无关;这个问题的解决取决于你到底需要做什么。