2016-10-29 8 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

"this"のコピーを返します。 – FedeWar

+0

@FedeWarどうすればこの問題を取り除くことができますか? –

+2

最小の実例が必要です。 – FedeWar

答えて

1

に割り当てられていますそれはあなたが何か間違っていることを時々大きな洞察にしています。

あなたはあなたです。

あなたが実装している機能は意味x+yxy変わらずのままにし、その値がそれらの和である新しいオブジェクトを生成する必要があること、一般的であるoperator+、です....

は、しかし、あなたの実装がもっとありますx += yのように:xの値を元の値とyの合計に変更する操作。

あなたが見ている問題は、その不一致の兆候です。

さておき、あなたの機能もconstの-間違った—これを修復することがあるとして、あなたは、さらに正しいのconstだったとアクセスoperator[]を宣言した場合、例えば、実際にはoperator+

として
Array operator +(const Array &obj) const 

を宣言この演算子を使用して配列の内容にアクセスした内部配列の内容では、コンパイラは配列の内容をoperator+に変更しないでください。

+0

ここでconstを使う利点は何ですか? –

+0

@Saad:1つの利点は、コンパイラが 'const 'とマークされたものを変更してはならないという契約を強制することです。他にも、 '' x''が '' const''のときに 'x + y'を実際に行うことができるなど、他のものもあります。" Const correctness "はあなたがしなければならないことです。あなたはそれを見に行くことができます。 – Hurkyl

+0

訂正していただきありがとうございますが、まだ動作していません。私はconstとx + yを格納するための3番目のオブジェクトを使用しましたが、出力は同じです。まだデストラクタが呼び出され、配列に0が代入されます。 –

関連する問題