2016-10-29 2 views
-2

Вот мой код. Проблема я задаю массив класса до нуля в деструкторе и когда я перегружать оператор в моей программе вызывается деструктор и мои массивы автоматически присваивается 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"; 
} 
+2

Вы возвращаете копию «этого». – FedeWar

+0

@FedeWar, так как он может избавиться от этой проблемы? –

+2

Нам нужен минимальный рабочий пример. – FedeWar

ответ

1

Когда вы застряли, как это, это иногда большой ключ, что вы делаете что-то неправильно.

И вы.

Функции вы реализуете это operator+, смысл которого, как правило, что x+y следует оставить x и y без изменений и создать новый объект, значение которого их сумма ....

Однако ваша реализации более как x += y: операция, которая изменяет значение x на сумму его первоначального значения и y.

Проблемы, которые вы видите, являются симптомом этого несоответствия.

Как и в стороне, ваши функции также Уста-некорректные — отремонтировать это, например, объявить operator+, как

Array operator +(const Array &obj) const 

В самом деле, если вы дополнительно объявили operator[], что было сопзом правильно, и доступа к содержимое внутреннего массива обращалось к содержимому массива с помощью этого оператора, компилятор мог бы указать на то, что вы не должны изменять содержимое массива в operator+.

+0

. Какая польза от использования const здесь? –

+0

@Saad: Одно из преимуществ заключается в том, что компилятор принуждает контракт к тому, что функция не должна изменять вещи, помеченные 'const', которые могли бы привести вас в вашу ошибку здесь. Кроме того, другие вещи, например, фактически могут выполнять «x + y», когда 'x' является' const' .. «Const correctness» - это то, что вы должны делать; вы можете пойти посмотреть. – Hurkyl

+0

спасибо за исправление, но он пока не работает. Я использовал const, а также третий объект для хранения x + y, но вывод такой же. все еще деструктор вызывается и массив присваивается 0. –