设计一个表示分数的类Fraction。这个类用两个整型变量分别表示分子和分母。C++
时间: 2024-09-13 19:15:02 浏览: 117
在C++中设计一个表示分数的类`Fraction`,我们需要考虑几个关键点:表示分子和分母的整型变量、分数的初始化、分数的约简、分数的加减乘除运算、以及分数的输出格式等。
以下是一个简单的`Fraction`类的实现示例:
```cpp
#include <iostream>
#include <numeric> // 用于std::gcd计算最大公约数
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
// 私有成员函数,用于约简分数
void reduce() {
int gcd = std::gcd(numerator, denominator); // 计算最大公约数
numerator /= gcd;
denominator /= gcd;
if (denominator < 0) { // 确保分母为正数
numerator = -numerator;
denominator = -denominator;
}
}
public:
// 构造函数
Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) {
if (denominator == 0) {
throw std::invalid_argument("Denominator cannot be zero.");
}
reduce();
}
// 分数加法
Fraction operator+(const Fraction& other) const {
return Fraction(numerator * other.denominator + other.numerator * denominator,
denominator * other.denominator);
}
// 分数减法
Fraction operator-(const Fraction& other) const {
return Fraction(numerator * other.denominator - other.numerator * denominator,
denominator * other.denominator);
}
// 分数乘法
Fraction operator*(const Fraction& other) const {
return Fraction(numerator * other.numerator, denominator * other.denominator);
}
// 分数除法
Fraction operator/(const Fraction& other) const {
if (other.numerator == 0) {
throw std::invalid_argument("Cannot divide by zero fraction.");
}
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;
}
};
```
在这个类中,我们定义了分子和分母为私有成员变量,并提供了一个私有成员函数`reduce`用于约简分数。此外,我们还定义了构造函数以及加、减、乘、除运算符重载,并重载了输出运算符以便于打印分数对象。
这个类的基本使用示例如下:
```cpp
int main() {
Fraction f1(1, 2); // 创建分数1/2
Fraction f2(3, 4); // 创建分数3/4
Fraction f3 = f1 + f2; // 分数相加
Fraction f4 = f1 * f2; // 分数相乘
std::cout << "f1 + f2 = " << f3 << std::endl;
std::cout << "f1 * f2 = " << f4 << std::endl;
return 0;
}
```
阅读全文