描述有理数的 Rational 类如下,请补充类的其他成员使其能够执行各种运算。 class Rational{ int m; // 分母 int n; // 分子 void simple( ); //约分 public: Rational(int nn=1,int mm=1);//构造 …… }; 1)重载算术运算符“+”、“-”、“*”、“/”,使之能够适用于各种有理数的四则运算。 2)重载比较运算符“>”、“ <=” 和“==”,使之能够比较两个有理数。 3)重载运算符“<<”,使其能以规范的方式输出分数,如 1/2,-1/3,分母不能为 0。
时间: 2023-05-10 18:55:42 浏览: 186
class Rational{
private:
int m; // 分母
int n; // 分子
void simple( ); //约分
public:
Rational(int nn=1,int mm=1);//构造函数
Rational operator+(const Rational& r) const; //重载算术运算符“+”
Rational operator-(const Rational& r) const; //重载算术运算符“-”
Rational operator*(const Rational& r) const; //重载算术运算符“*”
Rational operator/(const Rational& r) const; //重载算术运算符“/”
bool operator>(const Rational& r) const; //重载比较运算符“>”
bool operator<=(const Rational& r) const; //重载比较运算符“<=”
bool operator==(const Rational& r) const; //重载比较运算符“==”
friend std::ostream& operator<<(std::ostream& os, const Rational& r); //重载运算符“<<”
};
Rational::Rational(int nn, int mm) : n(nn), m(mm) {}
void Rational::simple() {
int gcd = std::gcd(n, m);
n /= gcd;
m /= gcd;
}
Rational Rational::operator+(const Rational& r) const {
Rational res(n * r.m + m * r.n, m * r.m);
res.simple();
return res;
}
Rational Rational::operator-(const Rational& r) const {
Rational res(n * r.m - m * r.n, m * r.m);
res.simple();
return res;
}
Rational Rational::operator*(const Rational& r) const {
Rational res(n * r.n, m * r.m);
res.simple();
return res;
}
Rational Rational::operator/(const Rational& r) const {
Rational res(n * r.m, m * r.n);
res.simple();
return res;
}
bool Rational::operator>(const Rational& r) const {
return n * r.m > m * r.n;
}
bool Rational::operator<=(const Rational& r) const {
return !(*this > r);
}
bool Rational::operator==(const Rational& r) const {
return n * r.m == m * r.n;
}
std::ostream& operator<<(std::ostream& os, const Rational& r) {
if (r.m == 0) {
os << "分母不能为0";
} else if (r.n == 0) {
os << 0;
} else {
os << r.n << "/" << r.m;
}
return os;
}
阅读全文