在main前面打一个断电,单步调试,整个程序更易理解。

#include<iostream>
#include<string>
#include<stdlib.h>
class Rational
{public:Rational(int num, int denom);//num 分子 denom 分母Rational operator+(Rational rhs);//rhs右操作数Rational operator-(Rational rhs);Rational operator*(Rational rhs);Rational operator/(Rational rhs);void print();private:void normalize();//对分数的简化int numerator;//分子int denominator;//分母
};
Rational::Rational(int num, int denom)
{numerator = num;denominator = denom;normalize();
}
//化简
void Rational::normalize()
{//分母一定为正if (denominator < 0){numerator = (-1)*numerator;denominator = (-1)*denominator;}//欧几里得算法int a = abs(numerator);int b = abs(denominator);//求最大公因数while (b > 0){int t = a % b;a = b;b = t;}//分子分母分别除以最大公因数numerator = numerator / a;denominator = denominator / a;
}
//加
Rational Rational::operator+(Rational rhs)
{int a = numerator;int b = denominator;int c = rhs.numerator;int d = rhs.denominator;int e = a * d + c * b;int f = b * d;return Rational(e, f);
}
//减:减一个数等于加上这个数的相反数
Rational Rational::operator-(Rational rhs)
{rhs.numerator = -rhs.numerator;Rational result = this->operator+(rhs);return result;
}
//乘
Rational Rational::operator*(Rational rhs)
{int a = numerator;int b = denominator;int c = rhs.numerator;int d = rhs.denominator;int e = a * c;int f = b * d;return Rational(e, f);
}
//除
Rational Rational::operator/(Rational rhs)
{int t = rhs.numerator;rhs.numerator = rhs.denominator;rhs.denominator = t;Rational result = this->operator*(rhs);return result;
}
//打印
void Rational::print()
{if (numerator%denominator == 0){std::cout << numerator / denominator;}else std::cout << numerator << "/" << denominator;
}
int main()
{//定义两个数Rational f1(-2, 3);Rational f2(3, 2);//加法Rational res = f1 + f2;//f1.+f2,f1是重载运算符的对象本身f1.print();std::cout << " + ";f2.print();std::cout << " = ";res.print();std::cout << std::endl << std::endl;//减法res = f1 - f2;//f1.-f2,f1是重载运算符的对象本身f1.print();std::cout << " - ";f2.print();std::cout << " = ";res.print();std::cout << std::endl << std::endl;//乘法res = f1 * f2;//f1./f2,f1是重载运算符的对象本身f1.print();std::cout << " * ";f2.print();std::cout << " = ";res.print();std::cout << std::endl << std::endl;//除法res = f1 / f2;//f1./f2,f1是重载运算符的对象本身f1.print();std::cout << " ÷ ";f2.print();std::cout << " = ";res.print();std::cout << std::endl << std::endl;system("pause");}

C++运算符重载 实现有理数(分数)的加减法相关推荐

  1. 定义分数类中和运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。

    /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作    者:李德彪 *完成时间:2016年6月15日 * ...

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

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

  3. 8-3 实现分数类中的运算符重载

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

  4. [C++]分数类的定义(成员函数、运算符重载)

    [C++]分数类的定义(成员函数.运算符重载) 1 分数类成员和成员函数 1.1 分数类成员 1.2 分数类的成员函数 1.3 分数类的io操作 1.4 分数类的预定义 2 成员函数定义 2.1 化简 ...

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

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

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

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

  7. 2013级C++第9周(春)项目——运算符重载(二)

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生 ...

  8. 运算符重载例子分数加减乘除,赋值,输入输出比较大小

    把老师代码上传一下,方便用移动设备时刻查看 //有理数类的运算符重载 #include <iostream> using namespace std; class Rational{pri ...

  9. C++知识点41——运算符的重载概念与分数类实现(下)

    接上篇文章https://blog.csdn.net/Master_Cui/article/details/109515571继续实现分数类和相关运算符的重载 6.自增自减运算符(++ --)的重载 ...

最新文章

  1. 合并本地Maven仓库
  2. Ubuntu 搭建ndk环境
  3. 如果你在北京失业了,别怕,记得去领这笔钱!最少2034元/月!
  4. nginx 安装_安装Nginx的几种方式
  5. 20190813 On Java8 第一章 对象的概念
  6. ArcGIS 10.5 及 ArcGIS Server下载安装破解环境配置
  7. 在 UIWebView 中如何准确获得页面加载完成的事件
  8. MFC多文档开发记录
  9. gauscoor软件怎么用_高斯坐标经纬度转换器
  10. 论文阅读 (70):Exploring Self-attention for Image Recognition
  11. java魂斗罗_魂斗罗java源代码分享
  12. 医药电商行业概况及发展趋势!
  13. 节点本地范围和链路本地范围_802.11协议精读15:链路模型(基于Free-Space Path Loss)...
  14. 自定义圆形进度条的实现方式
  15. 运维部门工作总结_运维部技术工作总结
  16. HTML5作业自我评价,最新简历自我评价范文(精选5篇)
  17. 暴风魔镜之虚拟漫游(更新中。。。)
  18. 致微信:我们什么时候重新定义群聊?
  19. 幼师计算机能力自我评价,幼师工作能力自我评价
  20. bluekitchen-stm32f1/csr8311移植笔记(1)-开发环境配置

热门文章

  1. selenium java session_Selenium Java浏览器会话重用
  2. linux wine运行效率,Wine 3.0让Windows应用在Linux上流畅运行!
  3. POJ3244(工科数学分析)
  4. Spaly_Tree 模版
  5. 《openssl 编程》之 RSA(转)
  6. gh0st支持win7和win8
  7. IP地址的三种表示格式 及 在Socket编程中的应用
  8. 端口复用:隐藏 嗅探与攻击
  9. MySQL(五)MySQL事务
  10. 深入Go的底层,带你走近一群有追求的人