我开始编写自己的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;
}
有人可以就此提出一些建议吗?
答案 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");
}