C++ 在运算符重载中调用析构函数
这是我的密码。问题是我在析构函数中将类的数组赋值为零,当我在程序中执行运算符重载时,析构函数被调用,数组被自动赋值为0C++ 在运算符重载中调用析构函数,c++,oop,operator-overloading,destructor,operator-keyword,C++,Oop,Operator Overloading,Destructor,Operator Keyword,这是我的密码。问题是我在析构函数中将类的数组赋值为零,当我在程序中执行运算符重载时,析构函数被调用,数组被自动赋值为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
//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";
}
//重载加号运算符
数组::运算符+(数组和obj)
{
对于(int i=0;i<10;i++)
{
this->arr[i]=this->arr[i]+对象arr[i];
}
归还*这个;
}
//重载负运算符
数组::运算符-(数组对象)
{
对于(int i=0;i<10;i++)
{
this->arr[i]=this->arr[i]-obj.arr[i];
}
归还*这个;
}
//重载赋值运算符
void数组::运算符=(数组和对象)
{
对于(int i=0;i<10;i++)
{
arr[i]=对象arr[i];
}
}
//类析构函数
数组::~Array()
{
当你陷入这样的困境时,有时这是你做错了什么的一个重要线索
而你是
您正在实现的函数是operator+
,其含义通常是x+y
应该保持x
和y
不变,并生成一个新对象,其值是它们的和
但是,您的实现更像是x+=y
:一种将x
的值更改为其原始值与y
之和的操作
您所看到的问题就是这种不匹配的症状
另一方面,您的函数也不正确-要修复此问题,例如,将operator+
声明为
Array operator +(const Array &obj) const
事实上,如果您另外声明了一个操作符[]
如果常量正确并访问了内部数组的内容,则使用此运算符访问了数组的内容,编译器会告诉您不应该在运算符+
中修改数组的内容。您返回的是“this”的副本@federwar那么它如何解决这个问题呢?我们需要一个简单的工作示例。要么通过引用返回并调用函数operator+=
,要么停止处理这个
@federwar这里有一个指向我完整代码的链接,在这里使用const有什么好处?@Saad:一个好处是编译器强制执行函数不应该修改标记为const
的东西,这可能会让你在这里犯错误。还有其他事情——比如当x
为const
时,实际上能够执行x+y
。“const correctificity”是您应该做的事情;您可以去查找它。感谢您的更正,但它还没有工作。我使用了const和第三个对象来存储x+y,但输出是相同的。仍然调用析构函数,并为数组分配了0。