设计一个类,用自己的成员函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。要求: (1)输出结果是最简分数(可以是带分数); (2)分母为1,只输出分子。 (3)用友元函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。
时间: 2023-07-10 22:12:45 浏览: 51
好的,我可以帮你设计一个类 Fraction,来实现对整型的运算符=、+、-、*、/ 适用于分数运算,满足题目要求并输出最简分数或带分数。
以下是代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
// 构造函数
Fraction(int numerator = 0, int denominator = 1): numerator(numerator), denominator(denominator) {
simplify(); // 约分
}
// 成员函数重载运算符
Fraction& operator=(const int& num) {
numerator = num;
denominator = 1;
return *this;
}
Fraction operator+(const Fraction& f2) const {
int num = numerator * f2.denominator + f2.numerator * denominator;
int den = denominator * f2.denominator;
Fraction res(num, den);
res.simplify();
return res;
}
Fraction operator-(const Fraction& f2) const {
int num = numerator * f2.denominator - f2.numerator * denominator;
int den = denominator * f2.denominator;
Fraction res(num, den);
res.simplify();
return res;
}
Fraction operator*(const Fraction& f2) const {
int num = numerator * f2.numerator;
int den = denominator * f2.denominator;
Fraction res(num, den);
res.simplify();
return res;
}
Fraction operator/(const Fraction& f2) const {
int num = numerator * f2.denominator;
int den = denominator * f2.numerator;
Fraction res(num, den);
res.simplify();
return res;
}
// 友元函数重载运算符
friend Fraction& operator=(int& num, Fraction& f) {
f.numerator = num;
f.denominator = 1;
return f;
}
friend Fraction operator+(const int& num, const Fraction& f) {
Fraction tmp(num, 1);
return tmp + f;
}
friend Fraction operator-(const int& num, const Fraction& f) {
Fraction tmp(num, 1);
return tmp - f;
}
friend Fraction operator*(const int& num, const Fraction& f) {
Fraction tmp(num, 1);
return tmp * f;
}
friend Fraction operator/(const int& num, const Fraction& f) {
Fraction tmp(num, 1);
return tmp / f;
}
// 输出函数
void print() const {
if (denominator == 1) {
cout << numerator << endl;
} else {
int integer = numerator / denominator;
int num = abs(numerator) % denominator;
int den = denominator;
if (integer != 0) {
cout << integer << " ";
}
if (num != 0) {
int gcd = __gcd(num, den);
num /= gcd;
den /= gcd;
cout << num << "/" << den << endl;
} else {
cout << 0 << endl;
}
}
}
private:
// 约分函数
void simplify() {
if (denominator == 0) {
cout << "Error: denominator can't be zero" << endl;
return;
}
if (numerator == 0) {
denominator = 1;
return;
}
int gcd = __gcd(abs(numerator), denominator);
numerator /= gcd;
denominator /= gcd;
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
};
int main() {
Fraction f1(3, 6), f2(2, 3);
Fraction f3 = f1 + f2;
f3.print(); // 输出:1/1
Fraction f4 = 5 + f3;
f4.print(); // 输出:6/1
Fraction f5 = f3 - 2;
f5.print(); // 输出:-1/1
Fraction f6 = f3 * 2;
f6.print(); // 输出:2/1
Fraction f7 = 6 / f3;
f7.print(); // 输出:6/5
return 0;
}
```
以上代码实现了 Fraction 类,并用成员函数和友元函数重载了整型运算符=、+、-、*、/,实现了对分数的运算。其中,成员函数重载运算符返回一个新的 Fraction 对象,友元函数重载运算符返回一个匿名的 Fraction 对象。输出函数 print() 实现了输出最简分数或带分数的功能。
希望能对你有所帮助!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![ppt](https://img-home.csdnimg.cn/images/20210720083527.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)