这是我的代码。问题是我在析构函数中将类数组赋值为零,当我在程序中执行运算符重载时,析构函数被调用,我的数组会自动赋值为0.
//Overloading Plus Operator
Array Array::operator +(Array &obj)
{
for (int i = 0; i < 10; i++)
{
this->arr[i] = this->arr[i] + obj.arr[i];
}
return *this;
}
//Overloading Minus Operator
Array Array::operator -(Array obj)
{
for (int i = 0; i < 10; i++)
{
this->arr[i] = this->arr[i] - obj.arr[i];
}
return *this;
}
//Overloading Assignment Operator
void Array::operator =(Array &obj)
{
for (int i = 0; i < 10; i++)
{
arr[i] = obj.arr[i];
}
}
//Class Destructor
Array::~Array()
{
cout << "\n\nDeleting Object " << this->objNum << "\n";
for (int i = 0; i < 10; i++)
{
arr[i] = 0;
}
cout << "\n\n";
}
答案 0 :(得分:1)
当你遇到这种情况时,它有时候是你做错事的一个重要线索。
你是。
您正在实施的功能是operator+
,其含义通常是x+y
应保持x
和y
不变,并生成一个值为其总和的新对象。 ...
但是,您的实现更像是x += y
的实现:将x
的值更改为其原始值和{{1}的总和的操作}。
您遇到的问题是这种不匹配的症状。
顺便说一句,你的函数也是const不正确的 - 要修复它,例如,将y
声明为
operator+
实际上,如果你另外声明了一个const Array operator +(const Array &obj) const
是正确的并且访问了内部数组的内容,使用这个操作符访问了数组的内容,那么编译器会让你知道你是不应该在operator[]
中修改数组的内容。