设计一个Rational类,进行带分数的运算。要求: (1)包含两个整数成员变量表示分子和分母。 (2)包含一个对所声明对象初始化的构造函数。不提供参数时,构造函数应提供默认值。分数存放成简化形式,例如分数“2/4”应在对象中存放成分子1和分母2的形式。 (3)采用成员函数的方式重载加法、减法运算符,采用友元函数的方式重载乘法和除法运算符,实现如下功能: a)两个Rational值相加,结果保存成简化形式并输出。 b)两个Rational值相减,结果保存成简化形式并输出。 c)两个Rational值相乘,结果保存成简化形式并输出。 d)两个Rational值相除,结果保存成简化形式并输出。 e)重载++运算符,实现对两个Rational值的自增操作,结果保存成简化形式并输出(1/2++的结果为3/2)。 f)声明一个类对象Rational R1,R2;重载赋值运算符”=”,将两个Rational值分子和分母颠倒位置后,赋值给R1和R2,并简化输出。(2/3 变为 3/2,如果分母是1,直接输出整数形式。) g)重载输出运算符,按a/b形式打印Rational值,其中a为分子,b为分母。 输入为两行,每行代表一个分数,每行有两个int类型的数字,分别代表分数的分子和分母 输出:按照步骤(3)操作后的分数值,分子和分母用“/”分隔,每个操作一行。
时间: 2024-02-24 19:00:29 浏览: 167
下面是一个可能的实现:
```
#include <iostream>
#include <algorithm>
using namespace std;
class Rational {
public:
Rational(int num = 0, int den = 1) : num_(num), den_(den) {
simplify();
}
friend Rational operator+(const Rational& lhs, const Rational& rhs) {
int num = lhs.num_ * rhs.den_ + rhs.num_ * lhs.den_;
int den = lhs.den_ * rhs.den_;
return Rational(num, den);
}
friend Rational operator-(const Rational& lhs, const Rational& rhs) {
int num = lhs.num_ * rhs.den_ - rhs.num_ * lhs.den_;
int den = lhs.den_ * rhs.den_;
return Rational(num, den);
}
friend Rational operator*(const Rational& lhs, const Rational& rhs) {
int num = lhs.num_ * rhs.num_;
int den = lhs.den_ * rhs.den_;
return Rational(num, den);
}
friend Rational operator/(const Rational& lhs, const Rational& rhs) {
int num = lhs.num_ * rhs.den_;
int den = lhs.den_ * rhs.num_;
return Rational(num, den);
}
Rational& operator++() {
num_ += den_;
simplify();
return *this;
}
Rational& operator=(const Rational& rhs) {
num_ = rhs.num_;
den_ = rhs.den_;
return *this;
}
friend ostream& operator<<(ostream& os, const Rational& r) {
os << r.num_ << "/" << r.den_;
return os;
}
private:
int num_;
int den_;
void simplify() {
if (den_ < 0) {
num_ = -num_;
den_ = -den_;
}
int g = __gcd(abs(num_), den_);
num_ /= g;
den_ /= g;
}
};
int main() {
int num1, den1, num2, den2;
cin >> num1 >> den1 >> num2 >> den2;
Rational r1(num1, den1);
Rational r2(num2, den2);
cout << r1 + r2 << endl;
cout << r1 - r2 << endl;
cout << r1 * r2 << endl;
cout << r1 / r2 << endl;
cout << ++r1 << endl;
Rational r3, r4;
r3 = r4 = Rational(den1, num1);
cout << r3 << endl;
cout << r4 << endl;
return 0;
}
```
阅读全文