【发布时间】:2017-09-04 20:57:58
【问题描述】:
我开始编写自己的向量类并开始重载 = 运算符。我在下面有类似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;
}
有人可以就此提供一些建议吗?
【问题讨论】:
-
请启用并注意您的编译器警告。
-
您从未在
myVector::operator=中调用过myVector::operator[]。如果你打电话给tem[i]或obj[i],你会这样做。 -
您应该在
*this而不是tem上进行操作,并在赋值运算符的末尾返回*this。您还对临时对象进行操作,然后返回对该临时对象的引用,该临时对象在函数退出时刚刚被破坏。你的编译器应该会警告你。 -
上面已经说过:如果你在你的
operator[]中设置ind unsigned,你不需要检查ind >= 0。而不是返回 0,您可能更喜欢抛出异常。 -
@windy401 您通常会返回对
*this的引用,以便您可以链接分配调用 (foo = bar = baz)
标签: c++ class vector operator-overloading