1

我目前正在尝试创建一个成员函数,它将对象 Fraction f 添加到当前对象并返回对当前对象的引用。我的第二个函数是一个非友元助手运算符,它添加两个 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&) {

    }

编辑:我猜我以前不是很清楚,部分原因是辅助功能没有被揭示。我尝试定义成员函数,上面的代码是我目前所拥有的。我不确定它在逻辑上是否合理,因为我仍在研究其他定义。非朋友助手操作员是我被难住并且不知道该怎么做的人。如果我可以就 += 成员运算符的定义是否正确以及如何处理非朋友助手运算符的一些建议获得一些帮助,那就太好了。抱歉有任何混淆。

4

1 回答 1

0

因为你已经简化了分数,你所要做的就是使用这个方程:
将两个分数相加

代码如下:

 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 回答