我一直在尝试编写一个 Fraction 类并重载它的一些运算符(+、-、-、/...)。起初,我尝试这样做:
Fraction& operator+(Fraction& rightOp)
{
Fraction result;
result.num = num * rightOp.den + den * rightOp.num;
result.den = den * rightOp.den;;
return result;
}
这产生了一个尴尬的结果。在测试时,如果我使用:
Fraction a(2,3);
Fraction b(4,5);
Fraction c = a + b;
cout << c << endl;
它会正确打印。但是,如果我使用:
Fraction a(2,3);
Fraction b(4,5);
Fraction c;
c = a + b;
cout << c << endl;
它将打印 -858993460/-858993460。
然后,当我尝试将重载函数更改为:
Fraction& operator+(Fraction& rightOp)
{
Fraction* result = new Fraction;
result->num = num * rightOp.den + den * rightOp.num;
result->den = den * rightOp.den;
return *result;
}
这一切都会很好。这让我对指向 C++ 中的类感到困惑,我真的不明白为什么第一个在特定情况下会失败。我将不胜感激任何解释。
提前致谢。
注意:运算符 << 不是问题的根源,但无论如何:
friend ostream& operator<<(ostream& out, Fraction& f)
{
out << f.num << "/" << f.den << endl;
return out;
}