Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运算符重载:无法通过*返回对象_C++_Operator Overloading - Fatal编程技术网

C++ 运算符重载:无法通过*返回对象

C++ 运算符重载:无法通过*返回对象,c++,operator-overloading,C++,Operator Overloading,“vector”类声明如下: class Vector { private: float *arr; int currentIndex; int arrSize; public: Vector(); Vector(int size); Vector(const Vector& V); ~Vector(); float leng

“vector”类声明如下:

class Vector
{
    private:
        float *arr;
        int currentIndex;
        int arrSize;

    public:
        Vector();
        Vector(int size);
        Vector(const Vector& V);
        ~Vector();
        
        float length();
        Vector normalize();

        Vector operator +(const Vector &v);
        Vector operator =(const Vector &v);
        Vector operator -(const Vector &v);
};
Vector  Vector::operator +(const Vector &v)
{
    for (int i = 0; i < arrSize; i++)
    {
        arr[i] += v.arr[i];
    }
    
    return *this;
}
我对“运算符+”和“运算符=”的定义如下:

class Vector
{
    private:
        float *arr;
        int currentIndex;
        int arrSize;

    public:
        Vector();
        Vector(int size);
        Vector(const Vector& V);
        ~Vector();
        
        float length();
        Vector normalize();

        Vector operator +(const Vector &v);
        Vector operator =(const Vector &v);
        Vector operator -(const Vector &v);
};
Vector  Vector::operator +(const Vector &v)
{
    for (int i = 0; i < arrSize; i++)
    {
        arr[i] += v.arr[i];
    }
    
    return *this;
}
Vector Vector::operator+(const Vector&v)
{
对于(int i=0;i
Vector Vector::operator=(const Vector&v)
{
if(this!=&v)//避免出现“v=v”的情况
{
arrSize=v.arrSize;
currentIndex=v.currentIndex;
删除[]arr;
arr=新浮点数[arrSize];
对于(int i=0;i
主要内容:

/…声明了v1、v2和v3。。。
v3=v1+v2;

cout您正在尝试实现操作符+(),因此不希望编辑该对象内存中的任何内容(这将是操作符+=()的工作)。 你应该这样做:

    Vector Vector::operator+(const& Vector v) //Note it's Vector, not Vector&
    {
        //You probably want to verify that the vectors are the same size?
        assert(arrSize == v.arrSize); //You can do this some other way as well
        
        Vector out = Vector(arrSize); //Create a new object on the heap to return
        for (int i = 0; i < arrSize; i++)
            out.arr[i] = arr[i] + v.arr[i]; //Do the addition
        return out;
    }
Vector Vector::operator+(const&Vector v)//注意它是Vector,而不是Vector&
{
//您可能想验证向量的大小是否相同?
assert(arrSize==v.arrSize);//您也可以用其他方法来实现
Vector out=Vector(arrSize);//在堆上创建一个新对象以返回
对于(int i=0;i
然后运算符=()类将如下所示:

    Vector& Vector::operator=(const& Vector v) //Note the return type of Vector&
    {
        if (this != &v) //This check is probably superflous
        {
            arrSize = v.arrSize;
            currentIndex = v.currentIndex;
            delete[] arr;
            arr = new float[arrSize];
            for (int i = 0; i < arrSize; i++)
                arr[i] = v.arr[i];
        }
        return *this;
    }
Vector&Vector::operator=(const&Vector v)//注意向量的返回类型&
{
if(this!=&v)//此检查可能是超级错误的
{
arrSize=v.arrSize;
currentIndex=v.currentIndex;
删除[]arr;
arr=新浮点数[arrSize];
对于(int i=0;i
您忘记返回引用,即Vector&Vector::operator