/*
* 作    者: 霍雨佳
* 完成日期:2014 年4月15日
* 版 本 号:v1.0
* 问题描述:实现分数类中的运算符重载
* 样例输入:
* 样例输出:
* 项目要求:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以以第5周项目2的代码为基础开始工作。
*/
#include <iostream>
#include <cstdlib>
using namespace std;
class CFraction
{
private:
double nume;  // 分子
double deno;  // 分母
public:
//构造函数及运算符重载的函数声明
CFraction(double nu=1,double de=1);   //构造函数,初始化用
void set(double nu,double de);    //置值,改变值时用
void simplify();     //化简(使分子分母没有公因子)
void display();
//二目的比较运算符重载
bool operator > (CFraction &t);
bool operator < (CFraction &t);
bool operator >= (CFraction &t);
bool operator <= (CFraction &t);
bool operator == (CFraction &t);
bool operator != (CFraction &t);
//二目的加减运算符的重载
CFraction operator+(CFraction &t);
CFraction operator-(CFraction &t);//对照+理解
CFraction operator*(CFraction &t);
CFraction operator/(CFraction &t);//对照+理解
};
int gcd(int x,int y);
CFraction::CFraction(double nu,double de) //构造函数,初始化用
{
if(de!=0)
{
nume=nu;
deno=de;
}
else
{
cout<<"初始化有误,退出程序"<<endl;
exit(0);
}
}
void CFraction::set(double nu,double de)   //置值,改变值时用
{
if(de!=0)
{
nume=nu;
deno=de;
}
}
void CFraction::display()
{
cout<<"="<<nume<<"/"<<deno<<endl;
}
bool CFraction::operator > (CFraction &t)
{
double m1=nume/deno;
double m2=t.nume/t.deno;
if (m1>m2) return true;
return false;
}
bool CFraction::operator < (CFraction &t)
{
double m1=nume/deno;
double m2=t.nume/t.deno;
if (m1<m2) return true;
return false;
}
bool CFraction::operator == (CFraction &t)
{
if (*this <t||*this>t) return false;
return true;
}
bool CFraction::operator != (CFraction &t)
{
if (*this == t) return false;//可以直接使用已经重载了的运算实现新运算
return true;
}
bool CFraction::operator >= (CFraction &t)
{
if (*this < t) return false;
return true;
}
bool CFraction::operator <= (CFraction &t)
{
if (*this > t) return false;
return true;
}
CFraction CFraction::operator+(CFraction &c)
{
CFraction t;
t.nume=nume*c.deno+c.nume*deno;
t.deno=deno*c.deno;
t.simplify();
return t;
}
CFraction CFraction::operator-(CFraction &c)//对照+理解
{
CFraction t;
t.nume=nume*c.deno-c.nume*deno;
t.deno=deno*c.deno;
t.simplify();
return t;
}
CFraction CFraction::operator*(CFraction &c)
{
CFraction t;
t.nume=nume*c.nume;
t.deno=deno*c.deno;
t.simplify();
return t;
}
CFraction CFraction::operator/(CFraction &c)//对照+理解
{
CFraction t;
if (!c.nume) return *this;   //除法无效
t.nume=nume*c.deno;
t.deno=deno*c.nume;
t.simplify();
return t;
}
void CFraction::simplify()   //化简(使分子分母没有公因子)
{
int m=gcd(nume,deno);
nume=nume/m;
deno/=m;
}
int gcd(int x,int y)//求两数最大公约数
{
int r;
while(y>0)
{
r=x%y;
x=y;
y=r;
}
return x;
}
int main()
{
CFraction t1(7,8),t2(5,6),t;
cout<<"t1";
t1.display();
cout<<"t2";
t2.display();
cout<<"比较分数的大小:\n";
if (t1>t2) cout<<"t1>t2"<<endl;
if (t1<t2) cout<<"t1<t2"<<endl;
if (t1==t2) cout<<"t1=t2"<<endl;
if (t1!=t2) cout<<"t1≠t2"<<endl;
if (t1>=t2) cout<<"t1≥t2"<<endl;
if (t1<=t2) cout<<"t1≤t2"<<endl;
cout<<"t1与t2的计算 \n";
t=t1+t2;
cout<<"t1+t2=";
t.display();
t=t1-t2;
cout<<"t=t1-t2=";
t.display();
t=t1*t2;
cout<<"t=t1*t2=";
t.display();
t=t1/t2;
cout<<"t=t1/t2=";
t.display();
return 0;
}

运行结果:

保持激情,不懈努力~~~

8-3 实现分数类中的运算符重载相关推荐

  1. 第十三周项目一-分数类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...

  2. 分数类中的运算符重载(续)

    问题及代码: /** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:test.cpp* 作 者:李盈盈* 完成日期:2015年 0 ...

  3. 项目3-分数类中的运算符重载

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 5 月 5 日 * 版 本 号:v1. ...

  4. /项目3-分数类中的运算符重载

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 4 月 24 日 * 版 本 号:v1 ...

  5. 第十二周项目二-Time类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

  6. 8-2 实现Time类中的运算符重载

    /* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现Time类中的运算符重载 * 样例输入: * 样例输出: * 项目要求:实现Time类中的 ...

  7. 实现复数类中的运算符重载(含有double类型)

    /* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现复数类中的运算符重载. * 样例输入: * 样例输出: * 问题分析:一个定义完整的类,是 ...

  8. 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)

    问题及代码: [项目-实现复数类中的运算符重载] (1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public:Complex() ...

  9. 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:number.cpp *作 者:单昕昕 *完成日期:20 ...

最新文章

  1. 在IIS7里配置 ISAPI,运行dll程序,总提示下载dll
  2. 这才是面试官想听的:详解「递归」正确的打开方式
  3. 唯品会HDFS性能挑战和优化实践
  4. 用 Go 构建一个区块链 -- Part 5: 地址 1
  5. Android 4.0 截屏(Screenshot)代码流程小结
  6. 本地项目antd 修改.less文件导致内存溢出
  7. [html] 对一个元素设置浮动后,它的特征是什么?
  8. LOJ#6283. 数列分块入门 7
  9. 提升KVM异构虚拟机启动效率:透传(pass-through)、DMA映射(VFIO、PCI、IOMMU)、virtio-balloon、异步DMA映射、预处理
  10. C++算法学习(力扣:1122. 数组的相对排序)
  11. 【注意力机制】一系列关于attention的高效改进大集合
  12. 汇编语言·易遗忘知识点汇总ing
  13. linux mint五笔输入法,Linux Mint安装ibus五笔和拼音输入法简明教程
  14. opencv+python获取摄像头视频流并翻转保存文件
  15. C语言---学生奖学金评定系统设计
  16. Kate Spade_百度百科
  17. 利用python识别身份证号后获取年龄和性别信息
  18. 分享一个超nice的数据分析实战案例, “手把手”教学,收藏等于学会
  19. mtk6592处理器怎么样,mtk6592参考设计原理图下载
  20. cad批量打印快捷键_原来CAD还能这么打印?批量打印了解一下?1分钟打印100张...

热门文章

  1. 发送手机验证码,验证手机验证码,包括数据表的设计
  2. erp接口,打单软件,订单管理软件,旗帜接口,备注接口,旗帜接口,打单接口,发货接口
  3. LeetCode刷题日记2022-2-28/1601. 最多可达成的换楼请求数目-排列组合
  4. 10009---59条令人捧腹但真实的程序员编程语录
  5. 京东数据库泄露事件分析
  6. 网站制作笔记-bootstrap可视化布局,表单生成工具,快速制作网页原型
  7. 基于SONY ICX694的4通道成像组件设计与调试
  8. linux下磁盘坏道修复
  9. 机械手组装调试系列教程(一)——开题篇
  10. Unity DOTS 学习笔记1 - ECS 0.50介绍和安装