+运算符重载

题目已定义了一个分数类,所有成员函数均已实现。

请通过类外定义运算符+的重载函数,完成:分数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;
}
相关推荐
2401_8920709818 小时前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
yuzhuanhei18 小时前
Visual Studio 配置C++opencv
c++·学习·visual studio
Wenweno0o18 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
小O的算法实验室18 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
chenjingming66619 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch891819 小时前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳19 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发19 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense19 小时前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎19 小时前
STL 栈 队列
开发语言·c++