在C++中,分数不是预先定义的,需建立一个分数类,使之具有下述功能:能防止分母为“0”,当分数不是最简形式时进行约分以及避免分母为负数。用重载运算符完成加法、减法、乘法以及除法等四则运算。并用重载关系符“==”
时间: 2024-01-24 07:17:01 浏览: 16
来判断两个分数是否相等。
下面是一个简单的分数类的实现示例:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
// 定义分数类
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
// 构造函数
Fraction(int num = 0, int den = 1) {
if (den == 0) {
cerr << "Error: denominator cannot be zero." << endl;
exit(EXIT_FAILURE);
}
numerator = num;
denominator = den;
simplify(); // 约分
}
// 计算最大公约数
int gcd(int a, int b) {
return (b == 0) ? a : gcd(b, a % b);
}
// 约分
void simplify() {
int d = gcd(abs(numerator), abs(denominator));
numerator /= d;
denominator /= d;
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
// 重载加法运算符
Fraction operator+(const Fraction& f) const {
int num = numerator * f.denominator + f.numerator * denominator;
int den = denominator * f.denominator;
return Fraction(num, den);
}
// 重载减法运算符
Fraction operator-(const Fraction& f) const {
int num = numerator * f.denominator - f.numerator * denominator;
int den = denominator * f.denominator;
return Fraction(num, den);
}
// 重载乘法运算符
Fraction operator*(const Fraction& f) const {
int num = numerator * f.numerator;
int den = denominator * f.denominator;
return Fraction(num, den);
}
// 重载除法运算符
Fraction operator/(const Fraction& f) const {
int num = numerator * f.denominator;
int den = denominator * f.numerator;
return Fraction(num, den);
}
// 重载等于运算符
bool operator==(const Fraction& f) const {
return (numerator == f.numerator) && (denominator == f.denominator);
}
// 输出分数
friend ostream& operator<<(ostream& out, const Fraction& f) {
out << f.numerator << "/" << f.denominator;
return out;
}
};
int main() {
Fraction f1(3, 4);
Fraction f2(2, 3);
Fraction f3 = f1 + f2;
Fraction f4 = f1 - f2;
Fraction f5 = f1 * f2;
Fraction f6 = f1 / f2;
cout << f1 << " + " << f2 << " = " << f3 << endl;
cout << f1 << " - " << f2 << " = " << f4 << endl;
cout << f1 << " * " << f2 << " = " << f5 << endl;
cout << f1 << " / " << f2 << " = " << f6 << endl;
cout << f1 << " == " << f2 << " ? " << (f1 == f2) << endl;
cout << f1 << " == " << f3 << " ? " << (f1 == f3) << endl;
return 0;
}
```
输出结果如下:
```
3/4 + 2/3 = 17/12
3/4 - 2/3 = 1/12
3/4 * 2/3 = 1/2
3/4 / 2/3 = 9/8
3/4 == 2/3 ? 0
3/4 == 17/12 ? 1
```