题目已定义了一个分数类,所有成员函数均已实现。
请通过类外定义运算符+的重载函数,完成:分数1+分数2,分数+整数,整数+分数的运算;
算法提示
假定有Fraction对象f1、f2,f1和f2相加结果的简要算法描述如下:
分子=f1.分子 * f2.分母 + f2.分子 * f1.分母
分母=f1.分母 * f2.分母
Fraction f3(分子,分母)
f3.约分
函数接口定义:
class Fraction //分数类
{
private:
int num = 0; //分子
int den = 1; //分母
public:
//构造函数
Fraction() {}
Fraction(int num, int den);
//打印分数
void PrintFraction() const;
//约分
Fraction Reduct();
//提取分子
int GetNum() const;
//提取分母
int GetDen() const;
};
裁判测试程序样例:
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
class Fraction //分数
{
private:
int num = 0; //分子
int den = 1; //分母
public:
//构造函数
Fraction() {}
Fraction(int num, int den);
//打印分数
void PrintFraction() const;
//约分
Fraction Reduct();
//提取分子
int GetNum() const;
//提取分母
int GetDen() const;
};
//类的成员函数均已定义,代码略
/* 请在这里填写答案 */
int main()
{
int n1,n2,n3,n4,n5,n6;
char c;
cin>>n1>>c>>n2>>n3>>c>>n4>>n5>>c>>n6;
Fraction f1(n1,n2),f2(n3,n4),f3(n5,n6),f4;
f4=1+f1+f2+f3+2;
f4.PrintFraction();
return 0;
}
输入样例:
1/2 1/12 1/12
输出样例:
11/3
cpp
// 重载运算符+,实现两个分数相加的功能
Fraction operator+(const Fraction& f1, const Fraction& f2) {
// 计算分子
int num = f1.GetNum() * f2.GetDen() + f2.GetNum() * f1.GetDen();
// 计算分母
int den = f1.GetDen() * f2.GetDen();
// 构造新的Fraction对象
Fraction result(num, den);
// 对结果进行约分
return result.Reduct();
}
// 重载运算符+,实现分数加整数的功能
Fraction operator+(const Fraction& f, int n) {
// 将整数转换为分数,分子为整数乘以原分母再加上原分子,分母不变
Fraction fraction(n * f.GetDen() + f.GetNum(), f.GetDen());
// 对结果进行约分
return fraction.Reduct();
}
// 重载运算符+,实现整数加分数的功能
Fraction operator+(int n, const Fraction& f) {
// 调用前面定义的重载运算符+(Fraction, int)函数
return f + n;
}