C ++ oveloaded运算符+和<<

时间:2017-05-16 12:34:26

标签: c++ operator-overloading

struct Complex
{
    int real;
    int imaginary;
};

ostream& operator<<(ostream& output, const Complex& temp)
{
    output << temp.real << " + " << temp.imaginary << 'i' << endl;
    return output;
}
Complex& operator+(Complex& c1, Complex& c2)
{
    Complex ans;
    ans.real = c1.real + c2.real;
    ans.imaginary = c1.imaginary + c2.imaginary;
    return ans;
}



int main()
{
    Complex temp;
    cin >> temp;
    Complex temp2;
    cin >> temp2;
    Complex ans;
    ans = temp + temp2;
    cout << ans << endl;
    return 0;
}

输入:

  1 2
  1 2 

输出

2 + 4i
-858993460 + -858993460i

我是C ++的新手,我编写了一些程序 我对这个程序的结果感到很困惑。请解释我对C ++的知识有什么问题。感谢您的帮助

2 个答案:

答案 0 :(得分:2)

您将通过引用返回本地变量。试试这个:

Complex operator+(Complex& c1, Complex& c2)
{
    Complex ans;
    ans.real = c1.real + c2.real;
    ans.imaginary = c1.imaginary + c2.imaginary;
    return ans;
}

注意&amp; amp;在函数声明中复杂之后。您无法通过引用返回局部变量,结果未定义。

答案 1 :(得分:1)

实际答案后你得到一些垃圾值。原因在于:

Complex& operator+(Complex& c1, Complex& c2)
{
    Complex ans;
    ans.real = c1.real + c2.real;
    ans.imaginary = c1.imaginary + c2.imaginary;
    return ans;
}

函数返回类型为Complex&,您的ans只是Complex,您只需返回它。如果您将退货类型更改为Complex,则一切都会保持一致。对于Complex&,您基本上是在尝试返回对范围内找不到的变量的引用。

有了更好的理解,请参阅此example。希望这能解决你的问题。