定义分数类MyFraction,其中包含两个私有整数 成员变量numerator和denominator,分别表示分数的分子 和分母。请完成MyFraction类的下面几个成员函数: (1)默认构造函数MyFraction(),不做任何初始化操作。 (2)构造函数MyFraction(int n, int d),分别使用n和d 初始化numerator和denominator; (3)void simplify()对分数进行化简,得到简化后的分数, 方法为让numerator和denominator都除以其最大公约数, 注意这里分子或分母可能为负数; (4)MyFraction operator+(MyFraction& f),重载'+'运算符, a/b + c/d = (a * d + b * c)/(b * d),要求返回的是 一个化简后的分数,例如6/12+1/3=5/6; (5)MyFraction operator-(MyFraction& f),重载'-'运算符, a/b - c/d = (a * d - b * c)/(b * d),要求返回的是 一个化简后的分数,例如6/12-1/3=1/6;
时间: 2024-04-12 11:29:07 浏览: 141
设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。
5星 · 资源好评率100%
下面是分数类 MyFraction 的实现:
```cpp
#include <iostream>
class MyFraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
// 默认构造函数
MyFraction() {
numerator = 0;
denominator = 1;
}
// 构造函数
MyFraction(int n, int d) {
numerator = n;
denominator = d;
}
// 化简分数
void simplify() {
// 计算最大公约数
int gcd = calculateGCD(numerator, denominator);
// 化简分数
numerator /= gcd;
denominator /= gcd;
// 处理负数情况
if (denominator < 0) {
numerator *= -1;
denominator *= -1;
}
}
// 计算最大公约数(辗转相除法)
int calculateGCD(int a, int b) {
if (b == 0)
return a;
return calculateGCD(b, a % b);
}
// 重载加法运算符
MyFraction operator+(MyFraction& f) {
int n = numerator * f.denominator + denominator * f.numerator;
int d = denominator * f.denominator;
MyFraction result(n, d);
result.simplify();
return result;
}
// 重载减法运算符
MyFraction operator-(MyFraction& f) {
int n = numerator * f.denominator - denominator * f.numerator;
int d = denominator * f.denominator;
MyFraction result(n, d);
result.simplify();
return result;
}
// 打印分数
void print() {
std::cout << numerator << "/" << denominator << std::endl;
}
};
int main() {
MyFraction f1(6, 12);
MyFraction f2(1, 3);
MyFraction sum = f1 + f2;
sum.print(); // 输出 5/6
MyFraction diff = f1 - f2;
diff.print(); // 输出 1/6
return 0;
}
```
使用 `MyFraction` 类,我们可以创建两个分数对象 `f1` 和 `f2`,然后使用重载的加法运算符 `+` 和减法运算符 `-` 对它们进行操作,最后打印结果。在构造函数中初始化分子和分母,然后使用 `simplify()` 方法进行化简,最后使用 `print()` 方法打印分数。
阅读全文