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

C++ 重载=自制向量类的运算符,c++,class,vector,operator-overloading,C++,Class,Vector,Operator Overloading,我开始编写自己的向量类,并开始重载=运算符。下面我有一些类似somevector=someothervector的代码,尽管我不确定它是否正确,因为我一直在为somevector[0]=5之类的东西做另一个重载,用它来给我的向量值 myVector& myVector::operator=(const myVector &obj) { myVector tem(obj.Size()); //make new empty vector of the needed size

我开始编写自己的向量类,并开始重载=运算符。下面我有一些类似
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;
}
myVector&myVector::operator=(常量myVector&obj)
{
myVector tem(obj.Size());//创建所需大小的新空向量,然后填充以下内容
对于(int i=0;i=0)和(ind

有人能提供一些建议吗?

你想在
这个
上操作,而不是临时操作

也就是说,您正在指定给当前对象的数据成员

大致如下:

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

请启用并注意编译器警告。您从未在
myVector::operator=
中调用过
myVector::operator[]
。如果你调用
tem[i]
obj[i]
,你会这样做。你应该在
*这个
上操作,而不是
tem
,并在赋值操作符的末尾返回
*这个
。您还对临时文件进行操作,然后返回对该临时文件的引用,该临时文件在函数退出时刚刚被销毁。你的编译器应该警告你这一点。上面已经说过:如果你在
操作符[]
中使ind未签名,你不需要检查
ind>=0
。与其返回0,不如抛出一个异常。@windy401您通常会返回一个对
*this
的引用,这样,如果数组不够大,无法容纳obj的所有元素,您就可以链接赋值调用(
foo=bar=baz
),我会删除[]数组,然后再删除array=new int吗[obj.size,像那样,然后继续赋值,或者?@windy401是的,完全像那样。太好了。非常感谢你所做的一切。现在一切都变得更有意义了。
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;
}
int& myVector::operator[](unsigned ind)
{
    if (ind < size)
        return array[ind];

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