C++ 重载 * 以乘以不同类型的分数

问题描述

我有一个带有私有类型 N(分子)和 D(分母)的分数类。这也允许类型具有不同的数字类型。我还制作了一个覆盖星号的运算符函数,以便我可以执行 x*y,其中 x 和 y 表示分数对象。但是,除非两者都只使用一种类型,否则它不起作用。我怎样才能解决这个问题?为该函数尝试了单独的模板,但似乎很复杂。此外,如果有一种方法可以在模板中只说数字类型(类似于 java 中的 Number 类),那将不胜感激:)

using namespace std;

template <typename N,typename  D> class Fraction {
private:
    N num;
    D denom;

public:
    Fraction(N numerator = 1,D denominator = 0) {
        assert(numerator != 0);
        this -> num   =     numerator;
        this -> denom =     denominator;
    }
    inline N getNumerator()    { return num;   }
    inline D getDenominator()  { return denom; }

    void setNumerator(N numerator)      { num = numerator;      }
    void setDenominator(D denominator)  { denom = denominator;  }

    friend Fraction operator*(Fraction& f,Fraction& g) {
        N numerator;
        D denominator;
        numerator = f.getNumerator() * g.getNumerator();
        denominator = f.getDenominator() * g.getDenominator();

        return Fraction(numerator,denominator);
    }

    friend Fraction operator*(const Fraction& f,int n) {
        return Fraction(n*f.getNumerator,f.getDenominator());
    }

    friend ostream& operator<<(ostream& os,const Fraction& f ) {
        return os << f.num << "/" << f.denom << endl;
    }
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)