重载 = 自制向量类的运算符

overloading = operator for self made vector class

本文关键字:运算符 向量 重载      更新时间:2023-10-16

我开始编写自己的向量类,并开始重载 = 运算符。我有下面的代码,用于类似 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;
}

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

你想在

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");
}