设计一个类,用自己的成员函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。要求: (1)输出结果是最简分数(可以是带分数); (2)分母为1,只输出分子。 (3)用友元函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。
时间: 2023-07-10 20:03:14 浏览: 44
好的,根据您的要求,我来为您设计一个分数类及其运算符重载:
```c++
#include <iostream>
using namespace std;
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
// 构造函数
Fraction(int num = 0, int den = 1) : numerator(num), denominator(den) {
int g = gcd(numerator, denominator);
numerator /= g;
denominator /= g;
}
// 拷贝构造函数
Fraction(const Fraction& f) : numerator(f.numerator), denominator(f.denominator) {}
// 运算符重载:=
Fraction& operator=(const Fraction& f) {
numerator = f.numerator;
denominator = f.denominator;
return *this;
}
// 运算符重载:+
friend Fraction operator+(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator + f1.denominator * f2.numerator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
// 运算符重载:-
friend Fraction operator-(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator - f1.denominator * f2.numerator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
// 运算符重载:*
friend Fraction operator*(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.numerator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
// 运算符重载:/
friend Fraction operator/(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.denominator;
int den = f1.denominator * f2.numerator;
return Fraction(num, den);
}
// 友元函数:输出分数
friend ostream& operator<<(ostream& os, const Fraction& f) {
if (f.denominator == 1) {
os << f.numerator;
} else {
int integer = f.numerator / f.denominator;
int num = f.numerator % f.denominator;
if (integer != 0) {
os << integer << " ";
}
os << num << "/" << f.denominator;
}
return os;
}
};
```
注:在上面的代码中,`gcd` 函数用于求两个整数的最大公约数。
使用示例:
```c++
int main() {
Fraction f1(2, 3), f2(3, 4);
cout << "f1 = " << f1 << endl;
cout << "f2 = " << f2 << endl;
cout << "f1 + f2 = " << f1 + f2 << endl;
cout << "f1 - f2 = " << f1 - f2 << endl;
cout << "f1 * f2 = " << f1 * f2 << endl;
cout << "f1 / f2 = " << f1 / f2 << endl;
return 0;
}
```
输出结果:
```
f1 = 2/3
f2 = 3/4
f1 + f2 = 17/12
f1 - f2 = -1/12
f1 * f2 = 1/2
f1 / f2 = 8/9
```
可以看到,我们自定义的分数类可以使用运算符 `+`、`-`、`*`、`/`,并且输出结果为最简分数或带分数。