overloading =自制矢量类的运算符

时间:2017-04-09 22:27:05

标签: c++ class vector operator-overloading

我开始编写自己的vector类,并开始重载=运算符。我有类似somevector = someothervector之类的代码,虽然我不确定它是对的,因为我坚持为somevector[0] = 5之类的东西进行另一次重载,以便给出我的向量值。

myVector& myVector::operator=(const myVector &obj)
{
    myVector tem(obj.Size()); //make new empty vector of the needed size then fill below

    for (int i = 0; i <= tem.size; ++i)
    {
        tem.array[i] = obj.array[i]; 
    }

    return tem;
}

我有以下的[]重载,它适用于读取向量的元素,但因为它只是返回元素的值,我不知道如何修复它以进行赋值,我想这可能是我的主要问题。

int myVector::operator[](int ind)
{
    if ( (ind >= 0) && (ind < size) )
    { return array[ind]; }

    return 0;
}

有人可以就此提出一些建议吗?

1 个答案:

答案 0 :(得分:4)

您希望在this上操作,而不是在临时操作。

即,您要分配给当前对象的数据成员

有些事情:

myVector& myVector::operator=(const myVector &obj)
{
    // insert appropriate code here to ensure your array's capacity is sufficient
    // to hold obj.size ints

    size = obj.size;
    for (int i = 0; i < size; ++i)
    {
        array[i] = obj.array[i]; 
    }

    return *this;
}

要启用您请求的语法(somevector[0] = 5),您的数组下标操作符必须将引用返回到存储的对象,否则您将在临时操作。如果索引不正确,如果它不存在,你可能想要抛出异常。

int& myVector::operator[](unsigned ind)
{
    if (ind < size)
        return array[ind];

    throw std::out_of_range("invalid index");
}