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 ++的知识有什么问题。感谢您的帮助
答案 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。希望这能解决你的问题。