2012-04-20 94 views
1

你好朋友下面的程序的輸出是如此奇怪。我沒有得到理由。 enter image description here爲什麼運營商超載行爲如此奇怪

#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 2012-04-20 13:35:38

+0

@Neal:是的,我確實調試過代碼,特別是temp.ab = ab + temp.ab; temp.cd = cd + temp.cd;代碼行爲奇怪 – 2012-04-20 13:36:51

+1

除了下面的解決方案,我還會初始化默認構造函數中的成員變量: xyz():ab(0),cd(0){} – 2012-04-20 13:42:38

回答

8

複製&粘貼錯誤?

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

應該

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

'+ 1'應該是這樣的^ _^ – Neal 2012-04-20 13:38:00

+0

非常感謝謝謝! – 2012-04-20 13:39:02

3

operator+(),該xyz temp;是未初始化的並且包含任何垃圾正好在那個位置。

3
xyz xyz :: operator +(xyz ob) 

你沒有任何使用OB對象。

1

臨時對象剛創建時用隨機值初始化,codeis只是添加到它。

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

輸出:

6..8