C++自定义数据结构来模拟分数
时间: 2024-10-13 18:18:21 浏览: 21
在C++中,为了模拟分数,我们可以创建一个名为`Fraction`的自定义数据结构,它通常包括两个整数成员变量:分子(`numerator`)和分母(`denominator`)。下面是一个简单的实现示例:
```cpp
class Fraction {
private:
int numerator;
int denominator;
public:
// 构造函数,接受两个整数参数
explicit Fraction(int num, int den) : numerator(num), denominator(den) {
// 如果分母为零,抛出异常或设置默认值(取决于需求)
if (denominator == 0)
throw std::invalid_argument("Denominator cannot be zero.");
// 简化分数(取最大公约数)
simplify();
}
// 私有函数用于简化分数
void simplify() {
int gcd = greatest_common_divisor(numerator, denominator);
numerator /= gcd;
denominator /= gcd;
}
// 重载运算符实现加法
Fraction operator+(const Fraction& other) const {
int new_numerator = numerator * other.denominator + other.numerator * denominator;
return Fraction(new_numerator, denominator);
}
// 重载运算符实现减法
Fraction operator-(const Fraction& other) const {
int new_numerator = numerator * other.denominator - other.numerator * denominator;
return Fraction(new_numerator, denominator);
}
// 可选的重载运算符实现乘法和除法
Fraction operator*(const Fraction& other) const {
return Fraction(numerator * other.numerator, denominator * other.denominator);
}
Fraction operator/(const Fraction& other) const {
if (other.denominator == 0)
throw std::runtime_error("Division by zero is not allowed.");
return Fraction(numerator * other.denominator, denominator * other.numerator);
}
// 显示分数的友元函数
friend std::ostream& operator<<(std::ostream& os, const Fraction& fraction) {
os << fraction.numerator << "/" << fraction.denominator;
return os;
}
private:
// 计算两个整数的最大公约数
static int greatest_common_divisor(int a, int b) {
return b == 0 ? a : greatest_common_divisor(b, a % b);
}
};
```
这个`Fraction`类可以用来存储和进行基本的分数运算,如加减乘除。注意,这里只是展示了核心的概念,实际应用中可能需要考虑更多的边界条件和异常处理。
阅读全文