2016-04-03 5 views
-2

私は整数の配列を保持する単純なクラスを持っています。私は2つのararysを一緒にマージする+をオーバーロードしたいです。私は2つのオーバーロードを定義しました。 +および=コンテナにオーバーロードされた演算子を使用する

class Money{ 

    Money & operator =(const Money &a) 
    { 
     for(int i = 0; i < size ;i++) arr[i] = a.arr[i]; 

     return *this; 
    } 
    Money & operator +(const Mone &a) 
    { 
     Money temp; 

     for(int i = 0; i < size ;i++){ 
      temp.arr[i] = arr[i] + a.arr[i]; 
     } 

     return temp; 
    } 

private: 
    int arr[50]; 
    int size = 50; 
} 

問題はインデックス0で、メモリから乱数を返します。私はsimilliarの問題についていくつかの質問を見たことがある*演算子(私はそれを見つけようとし、それをリンクしようとする)、私は私の演算子=から得た。これを引き起こしているのは何ですか?私は難しく、時間分析とunderstaningのコンセプトを持っているので、過負荷にに新しいです

Money a; 
Money b; 
Money d; 
d = a + b; 
// print array; 

としてそれを呼び出しています。

+0

無礼ではありませんが、「マネー」クラスのコンセプトは骨から欠けているようです。なぜあなたはそこに配列が必要ですか? –

+0

このクラスの概念は、過負荷を実践するためのものです。 – Darlyn

+0

@trolkura m_sizeとは何ですか?コードをコンパイルしましたか?最低限のコンパイルと検証プログラムを表示する。 –

答えて

2

基本的な問題はここにある、とのオーバーロードを行うには、本当に何もしています:

Money & operator +(const Mone &a) { 
    Money temp; 
     : 
    return temp; 

あなたは関数がそう返したときに破壊されたローカル変数への参照を返すということで問題がダングリングであります定義されていない動作につながります。

値をMoneyに変更してください。

1

私はoperator +の問題を理解しているので、一時変数tempを作成しています。その変数は "operator +"のコードが終了するまで存続します。その変数idへの参照を返すので、コードが終了したときには隠れたポインタになります。その参照はもはや有効ではありません。代わりにコードを変更して値で返すと、すべて正常に動作するはずです。代わりに、 "operator ="呼び出しの終了後に存在するオブジェクトに結び付けられているため、=演算子は正常に動作します。

関連する問題