【发布时间】:2021-01-19 15:45:00
【问题描述】:
我有一个带有私有类型 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;
}
};
【问题讨论】:
-
您可能对
std::ratio感兴趣,尽管它与编译时间分数有关
标签: c++ templates operator-overloading