C++ 运算符重载:无法通过*返回对象
“vector”类声明如下: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
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