6-5 12.3.1 基本Fraction分数类 分数 20 全屏浏览题目 作者 chanel 单位 中国地质大学(北京) 编写Fraction 类,封装分数的基本功能。 (1)实现构造函数重载。 (2)实现各个成员函数。
时间: 2023-12-10 17:37:37 浏览: 42
以下是基本Fraction分数类的代码实现:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
// 构造函数
Fraction(int num, int den) {
if (den == 0) {
cerr << "Error: Denominator cannot be zero." << endl;
exit(EXIT_FAILURE);
}
numerator = num;
denominator = den;
simplify();
}
// 重载默认构造函数
Fraction() {
numerator = 0;
denominator = 1;
}
// 获取分子
int getNumerator() const {
return numerator;
}
// 获取分母
int getDenominator() const {
return denominator;
}
// 设置分子
void setNumerator(int num) {
numerator = num;
simplify();
}
// 设置分母
void setDenominator(int den) {
if (den == 0) {
cerr << "Error: Denominator cannot be zero." << endl;
exit(EXIT_FAILURE);
}
denominator = den;
simplify();
}
// 将分数约分
void simplify() {
int gcd = findGCD(abs(numerator), abs(denominator));
numerator /= gcd;
denominator /= gcd;
// 如果分母为负数,则调整分子、分母的符号
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
// 找到最大公约数
int findGCD(int a, int b) {
if (b == 0) {
return a;
} else {
return findGCD(b, a % b);
}
}
// 重载加法运算符
Fraction operator+(const Fraction& other) const {
int newNum = numerator * other.denominator + other.numerator * denominator;
int newDen = denominator * other.denominator;
return Fraction(newNum, newDen);
}
// 重载减法运算符
Fraction operator-(const Fraction& other) const {
int newNum = numerator * other.denominator - other.numerator * denominator;
int newDen = denominator * other.denominator;
return Fraction(newNum, newDen);
}
// 重载乘法运算符
Fraction operator*(const Fraction& other) const {
int newNum = numerator * other.numerator;
int newDen = denominator * other.denominator;
return Fraction(newNum, newDen);
}
// 重载除法运算符
Fraction operator/(const Fraction& other) const {
int newNum = numerator * other.denominator;
int newDen = denominator * other.numerator;
return Fraction(newNum, newDen);
}
// 重载比较运算符
bool operator==(const Fraction& other) const {
return (numerator == other.numerator && denominator == other.denominator);
}
bool operator!=(const Fraction& other) const {
return !(*this == other);
}
bool operator<(const Fraction& other) const {
int num1 = numerator * other.denominator;
int num2 = other.numerator * denominator;
return num1 < num2;
}
bool operator<=(const Fraction& other) const {
return (*this < other) || (*this == other);
}
bool operator>(const Fraction& other) const {
return !(*this <= other);
}
bool operator>=(const Fraction& other) const {
return !(*this < other);
}
// 重载输出运算符
friend ostream& operator<<(ostream& os, const Fraction& f) {
os << f.numerator << "/" << f.denominator;
return os;
}
};
```
在该Fraction类中,我们实现了以下功能:
1. 构造函数重载,可用于初始化分数。
2. 成员函数包括获取分子、分母、设置分子、分母、约分、重载加减乘除运算符、重载比较运算符、重载输出运算符等。
3. 在构造函数和设置分母函数中,我们保证了分母不为0,并在分母为0的情况下报错并退出程序。
4. 在约分函数中,我们使用了辗转相除法(欧几里得算法)来找到最大公约数,并将分数约分至最简形式。
5. 重载加减乘除运算符时,我们按照分数的基本运算规则进行计算,并返回一个新的Fraction对象。
6. 重载比较运算符时,我们先将两个分数通分,然后比较分子大小。同时,我们还重载了输出运算符,方便输出分数。
以上就是基本Fraction分数类的实现,可以用于处理分数相关问题。