运算符重载=和[]同时

时间:2014-05-30 10:54:08

标签: c++ vector

我正在用c ++实现我自己的向量。

这是我的Vector类:

template <class T>
class Vector
{

    private :
        T *ptr;
        unsigned int numEle;

    public :
        T operator[] (unsigned int index)
        {
            if (index >= numEle)
                return ptr[0];
            else if (index < 0)
                 return ptr[0];
            else
                 return ptr[index];
        }

};

我想要做的是重载=运算符,这样当我写

  Vector v;
  v[2]=2; 

它将值2赋给第二个索引.... 请帮助.. !!

2 个答案:

答案 0 :(得分:6)

应该是

T& operator [] (unsigned int index)

适用于您的情况。另外,我建议您编写运算符的const版本。

const T& operator [] (unsigned int index) const

答案 1 :(得分:1)

Make 1方法返回对给定索引的引用;另一个const方法返回给定索引的const引用 - 后者用于读取类型const Vector&的元素。

T& operator[] (unsigned int index) // make it return a reference.
{
    if (index >= numEle)
        return ptr[0];

    return ptr[index];
};

const T& operator[] (unsigned int index) const // make it return a const reference
{
    if (index >= numEle)
        return ptr[0];

    return ptr[index];
};

请注意,unsigned int不能< 0,因此第二个if无用。

operator=用于撰写vector = anotherVector;这里不需要它。

但是,如果您的T是一个类,则可能需要operator=