2012-04-20 7 views
1

こんにちは、以下のプログラムの出力が非常に奇妙です。私は理由を得ていない。 operator+()オペレータのオーバーロードが異常に動作する理由

#include <iostream> 
using namespace std; 

class xyz 
{ 
    private: 
    int ab, cd; 
    public: 
    xyz() 
    { 

    } 
    xyz(int i, int j) 
    { 
     ab = i; 
     cd = j; 

    } 
    xyz operator+(xyz); 
    void show() 
    { 
     cout << ab << " .... "<< cd; 
    } 

}; 
xyz xyz :: operator +(xyz ob) 
{ 
    xyz temp; 
    temp.ab = ab + temp.ab; 
    temp.cd = cd + temp.cd; 
    return temp; 
} 

int main() 
{ 
    // xyz xy, yz; 

    xyz xy(2, 3); 
    xyz yz(4, 5); 
    xy = xy + yz; 

    xy.show(); 
    return 0; 
} 
+3

デバッガでそれを実行してみましたか?または**私たちは**デバッガですか? – Neal

+0

@Neal:はい、特にtemp.ab = ab + temp.abというコードをデバッグしました。 temp.cd = cd + temp.cd;コードが異常に動作する –

+1

以下のソリューションに加えて、デフォルトのコンストラクタでメンバ変数を初期化します。 xyz():ab(0)、cd(0){} –

答えて

8

コピー&ペーストエラー?

この

temp.ab = ab + temp.ab; 
temp.cd = cd + temp.cd; 

はあなたが全くOBオブジェクトを使用していない

temp.ab = ab + ob.ab; 
temp.cd = cd + ob.cd; 
+0

'+ 1'はそれであるはずです^ _^ – Neal

+0

おかげで解決策が見つかりました... –

3

enter image description herexyz temp;は初期化されていないで、ゴミがその場所にあることが起こったものは何でも含まれています。

3
xyz xyz :: operator +(xyz ob) 

でなければなりません。

1

一時オブジェクトは作成されたばかりで、ランダムな値で初期化され、コードは単にそれに追加されます。

xyz xyz :: operator +(xyz ob) 
{ 
xyz temp; 
temp.ab = ab + ob.ab; 
temp.cd = cd + ob.cd; 
return temp; 
} 

出力:

6..8

関連する問題