c++实验3、设计一个可以表达分数的类,用其成员函数重载运算符=、+、-,用其友元函数重载运算符*、/, 它们用来支持分数之间的四则或赋值运算。要求: (1)输出结果是最简分数(可以是带分数); (2)当分母为1时,只输出分子。
时间: 2023-05-31 14:02:07 浏览: 65
分数类的定义如下:
```c++
#include <iostream>
using namespace std;
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
Fraction(int num = 0, int den = 1); // 构造函数
void print(); // 输出分数
Fraction operator=(const Fraction& f); // 重载运算符=
Fraction operator+(const Fraction& f); // 重载运算符+
Fraction operator-(const Fraction& f); // 重载运算符-
friend Fraction operator*(const Fraction& f1, const Fraction& f2); // 友元函数,重载运算符*
friend Fraction operator/(const Fraction& f1, const Fraction& f2); // 友元函数,重载运算符/
int gcd(int a, int b); // 计算最大公约数
};
Fraction::Fraction(int num, int den) {
if (den == 0) {
cout << "分母不能为0" << endl;
exit(1);
}
if (num == 0) {
denominator = 1;
} else {
int d = gcd(abs(num), abs(den));
numerator = num / d;
denominator = den / d;
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
}
void Fraction::print() {
if (denominator == 1) {
cout << numerator << endl;
} else if (abs(numerator) >= denominator) {
int integer = numerator / denominator;
int num = numerator % denominator;
if (num < 0) {
num = -num;
}
cout << integer << " " << num << "/" << denominator << endl;
} else {
cout << numerator << "/" << denominator << endl;
}
}
Fraction Fraction::operator=(const Fraction& f) {
numerator = f.numerator;
denominator = f.denominator;
return *this;
}
Fraction Fraction::operator+(const Fraction& f) {
int num = numerator * f.denominator + f.numerator * denominator;
int den = denominator * f.denominator;
return Fraction(num, den);
}
Fraction Fraction::operator-(const Fraction& f) {
int num = numerator * f.denominator - f.numerator * denominator;
int den = denominator * f.denominator;
return Fraction(num, den);
}
Fraction operator*(const Fraction& f1, const Fraction& f2) {
int num = f1.numerator * f2.numerator;
int den = f1.denominator * f2.denominator;
return Fraction(num, den);
}
Fraction operator/(const Fraction& f1, const Fraction& f2) {
if (f2.numerator == 0) {
cout << "除数不能为0" << endl;
exit(1);
}
int num = f1.numerator * f2.denominator;
int den = f1.denominator * f2.numerator;
return Fraction(num, den);
}
int Fraction::gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
```
调用示例:
```c++
int main() {
Fraction f1(3, 4);
Fraction f2(2, 3);
Fraction f3 = f1 + f2;
f3.print(); // 输出 17/12
Fraction f4 = f1 - f2;
f4.print(); // 输出 1/12
Fraction f5 = f1 * f2;
f5.print(); // 输出 1/2
Fraction f6 = f1 / f2;
f6.print(); // 输出 9/8
Fraction f7 = f6;
f7.print(); // 输出 9/8
return 0;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)