私はC++を初めて使用し、練習として分数クラス「Frac」を作成しました。(a+b)、a および b が Frac オブジェクトであるような操作の結果を出力する場合を除いて、すべてが正常に機能しているようです。私の主な機能では、次を使用します。
Frac a(5, 2), b(9, 2), c(a+b); //Three fractions a=5/2, b=9/2, and c = a+b = 14/2 = 7/1
cout << (a+b) << endl; //This line's result makes no sense to me : always 2686600/4201035
cout << c << endl; //This line's result is ok : 7/1
operator<< をオーバーロードする方法は次のとおりです。
ostream& operator<<(ostream &stream, Fract const& a){
stream << a.getNum() << "/" << a.getDenom(); //Num is numerator of fraction a, Denom is its denominator
return stream;
}
演算子+ :
Fract& operator+(Fract const& a, Fract const& b){
Fract copy(a);
copie += b;
return copy;
}
演算子 += :
Fract& Fract::operator+=(Fract const& b){
Fract copy(b);
//Put on same denominator for add
copy.m_denom *= m_denom;
copy.m_num *= m_denom;
m_denom *= b.m_denom;
m_num *= b.m_denom;
//Now on same denominator
m_num += copy.m_num;
Fract::simplify();
return *this;
}
ゲッター:
int Fract::getDenom() const{return m_denom;}
int Fract::getNum() const{return m_num;}
プログラムをデバッグすると、 operator<< の次の行までは問題ありません。
stream << a.getNum() << "/" << a.getDenom();
実行前は、a.m_num と a.m_denom の値は良好 (7 と 1、デバッガーで確認) ですが、最初の呼び出し (ここでは a.getDenom()) の後、a.m_num と a.m_denom は 7 から切り替わります。そして1から2686600と4201035!オペレーターが変わっても同じことなので・・・
Fract a(5,2), b(9,2);
cout << (a+b) << endl << (a*b) << endl << (a/b) << endl << (a-b);
... の出力は次のとおりです。
2686600/4201035
2686600/4201035
2686600/4201035
2686600/4201035
と ...
Fract a(5,2), b(9,2), c(a+b), d(a*b), e(a/b), f(a-b);
cout << c << endl << d << endl << e << endl << f;
... の出力は次のとおりです。
7/1
45/4
5/9
-2/1
すべて正しい結果...
これは私を夢中にさせました。何時間も検索しましたが、解決策や同じ問題を抱えている人が見つかりませんでした. 誰かが私を助けてくれたら本当にうれしいです。君たちありがとう。