为什么运算符重载的行为如此奇怪

时间:2012-04-20 13:34:17

标签: c++ operator-overloading

Hello Friend以下程序的输出是如此奇怪。我没理由。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;
}

4 个答案:

答案 0 :(得分:8)

复制并粘贴错误?

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

应该是

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

答案 1 :(得分:3)

operator+()中,xyz temp;未初始化,并包含该位置发生的任何垃圾。

答案 2 :(得分:3)

xyz xyz :: operator +(xyz ob)

您不使用任何ob对象。

答案 3 :(得分:1)

临时对象刚刚使用随机值初始化,而codeis只是添加它。

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

输出:

6..8