请定义一个分数类,拥有两个整数的私有数据成员,分别表示分子和分母(分母永远为正数,符号通过分子表示)。 重载运算符加号"+",实现两个分数的相加,所得结果必须是最简分数。
时间: 2023-06-03 07:06:01 浏览: 166
我可以回答这个问题。以下是一个分数类的定义和相加运算符的重载实现:
```cpp
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
// 辗转相除法求最大公约数
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
public:
// 构造函数
Fraction(int n = 0, int d = 1) {
if (d == 0) {
// 分母不能为0
throw std::invalid_argument("The denominator cannot be zero");
}
if (d < 0) {
n = -n;
d = -d;
}
int factor = gcd(abs(n), d);
numerator = n / factor;
denominator = d / factor;
}
// 重载加法运算符
Fraction operator+(const Fraction& other) const {
int n = numerator * other.denominator + other.numerator * denominator;
int d = denominator * other.denominator;
return Fraction(n, d);
}
// 友元函数,重载输出运算符
friend std::ostream& operator<<(std::ostream& os, const Fraction& f) {
return os << f.numerator << '/' << f.denominator;
}
};
```
使用示例:
```cpp
Fraction f1(1, 2);
Fraction f2(-3, 4);
Fraction sum = f1 + f2;
std::cout << sum << std::endl; // 输出 "-1/4"
```
注意,本题中并没有要求实现减法、乘法、除法等运算符,如果有需要的话,可以仿照加法运算符的实现进行重载。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)