1

現在、Fraction f というオブジェクトを現在のオブジェクトに追加し、現在のオブジェクトへの参照を返すメンバー関数を作成しようとしています。2 番目の関数は、2 つの Fraction オブジェクトを加算して結果のコピーを返す非フレンド ヘルパー オペレーターです。これを行う方法が正確にはわからず、アドバイスを探していました。ほとんどのオブジェクトは、以前のメンバー関数内で以前に単純化された分数です。基本的に、単純化された分数を追加するだけです。これが私がこれまでに持っているものです:

//header.h       
class Fraction {
        int num;
        int den;
    public:
        Fraction();
        Fraction(int, int);
        Fraction& operator+=(const Fraction& f);
        friend bool operator==(const Fraction&, const Fraction&);
        void simplify();
        void display() const;
    };

    Fraction operator+(const Fraction&, const Fraction&);

そしてモジュール:

//module.cpp

    #include "Fraction.h"
    #include <iostream>


    Fraction::Fraction() {
        num = 0;
        den = 0;
    }

    Fraction::Fraction(int n, int d) {
        num = n;
        den = d;
        simplify();
    }

    void Fraction::simplify() {
        int temp = den;
        int a = num;
        int b = den;
        int gcd;
        if (b > a) {
            b = num;
            a = den;
        }
        while (temp != 0) {
            temp = a % b;
            a = b;
            b = temp;
        }
        gcd = a;
        num /= gcd;
        den /= gcd;
    }

    void Fraction::display() const {
        std::cout << num << "/" << den << std::endl;
    }

    //member function in question
    Fraction& Fraction::operator+=(const Fraction& f) {
        num += f.num;
        den += f.den;
        return *this;
    }

//member function in question
        Fraction operator+(const Fraction&, const Fraction&) {

    }

編集:以前はそれほど明確ではなかったと思いますが、それはヘルパー関数が明らかにされていないことが原因の 1 つです。メンバー関数を定義しようとしましたが、上記のコードは現在私が持っているものです。私はまだ他の定義を検討しているので、それが論理的に正しいかどうかはわかりません. 非友人ヘルパーオペレーターは、私が困惑しているものであり、何をすべきかわかりません。+= メンバー演算子の定義が正しいかどうか、および非フレンド ヘルパー演算子にアプローチする方法についてアドバイスを得ることができれば、それは素晴らしいことです。混乱して申し訳ありません。

4

1 に答える 1

0

分数を単純化したので、次の方程式を使用するだけです。
2 つの分数の合計

コードは次のようになります。

 Fraction& Fraction::operator+=(const Fraction& f) {
        num = num * f.den + f.num * den;
        den *= f.den;
        simplify();
        return * this;
    }

編集:演算子のオーバーロードの詳細については 、この質問をご覧ください

于 2014-03-05T20:42:12.220 に答える