Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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++_Oop_Operator Overloading_Destructor_Operator Keyword - Fatal编程技术网

C++ 在运算符重载中调用析构函数

C++ 在运算符重载中调用析构函数,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

这是我的密码。问题是我在析构函数中将类的数组赋值为零,当我在程序中执行运算符重载时,析构函数被调用,数组被自动赋值为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";
}
//重载加号运算符
数组::运算符+(数组和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。