C++运算符重载 实现有理数(分数)的加减法
在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++运算符重载 实现有理数(分数)的加减法相关推荐
- 定义分数类中和运算符重载,实现分数的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李德彪 *完成时间:2016年6月15日 * ...
- 第十三周项目一-分数类中的运算符重载
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...
- 8-3 实现分数类中的运算符重载
/* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现分数类中的运算符重载 * 样例输入: * 样例输出: * 项目要求:实现分数类中的运算符重 ...
- [C++]分数类的定义(成员函数、运算符重载)
[C++]分数类的定义(成员函数.运算符重载) 1 分数类成员和成员函数 1.1 分数类成员 1.2 分数类的成员函数 1.3 分数类的io操作 1.4 分数类的预定义 2 成员函数定义 2.1 化简 ...
- 项目3-分数类中的运算符重载
/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 5 月 5 日 * 版 本 号:v1. ...
- /项目3-分数类中的运算符重载
/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 4 月 24 日 * 版 本 号:v1 ...
- 2013级C++第9周(春)项目——运算符重载(二)
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生 ...
- 运算符重载例子分数加减乘除,赋值,输入输出比较大小
把老师代码上传一下,方便用移动设备时刻查看 //有理数类的运算符重载 #include <iostream> using namespace std; class Rational{pri ...
- C++知识点41——运算符的重载概念与分数类实现(下)
接上篇文章https://blog.csdn.net/Master_Cui/article/details/109515571继续实现分数类和相关运算符的重载 6.自增自减运算符(++ --)的重载 ...
最新文章
- 合并本地Maven仓库
- Ubuntu 搭建ndk环境
- 如果你在北京失业了,别怕,记得去领这笔钱!最少2034元/月!
- nginx 安装_安装Nginx的几种方式
- 20190813 On Java8 第一章 对象的概念
- ArcGIS 10.5 及 ArcGIS Server下载安装破解环境配置
- 在 UIWebView 中如何准确获得页面加载完成的事件
- MFC多文档开发记录
- gauscoor软件怎么用_高斯坐标经纬度转换器
- 论文阅读 (70):Exploring Self-attention for Image Recognition
- java魂斗罗_魂斗罗java源代码分享
- 医药电商行业概况及发展趋势!
- 节点本地范围和链路本地范围_802.11协议精读15:链路模型(基于Free-Space Path Loss)...
- 自定义圆形进度条的实现方式
- 运维部门工作总结_运维部技术工作总结
- HTML5作业自我评价,最新简历自我评价范文(精选5篇)
- 暴风魔镜之虚拟漫游(更新中。。。)
- 致微信:我们什么时候重新定义群聊?
- 幼师计算机能力自我评价,幼师工作能力自我评价
- bluekitchen-stm32f1/csr8311移植笔记(1)-开发环境配置