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;
}