C++实现:分数类
来源:互联网 发布:淘宝大学图片 编辑:程序博客网 时间:2024/05/22 00:41
花了几个小时敲代码——测试——修改……
总算搞定了
好累,睡觉去的
有问题欢迎提出,继续修改
首先是头文件CFraction.h:
#ifndef CFRACTION_H_#define CFRACTION_H_#include <iostream>using namespace std;class CFraction{public:CFraction(int a=1,int b=1);virtual ~CFraction(){};float GetValue()const;//获取分数值void Simplification();//化简void Show();//显示分数friend ostream& operator<<(ostream& os,CFraction& f);//重载四则运算操作符CFraction operator +(const CFraction& f)const;CFraction operator -(const CFraction& f)const;CFraction operator *(const CFraction& f)const;CFraction operator /(CFraction& f)const;//重载比较操作符bool operator ==(const CFraction& f)const;bool operator >(const CFraction& f)const;bool operator <(const CFraction& f)const;CFraction GetReciprocal();//获取分数的倒数void ChangeValue(int a,int b);//改变当前分数分子和分母private:int m_molecular;//分子int m_denomilator;//分母bool m_IsNegative;//是否为负数 };#endif;
然后是类方法实现文件CFraction.cpp
#include "stdafx.h"#include "CFraction.h"#include <cmath>//辗转相除法求最大公约数int Function(int& a,int& b){int r=a%b;while(r){a=b;b=r;r=a%b;}return b;}ostream& operator<<(ostream& os,CFraction& f){f.Simplification();if(f.m_IsNegative)//负数os<<" -"<<f.m_molecular<<"/"<<f.m_denomilator<<endl;else//正数os<<" "<<f.m_molecular<<"/"<<f.m_denomilator<<endl;return os;}CFraction::CFraction(int a, int b):m_IsNegative(false){//默认分数为正1while(b==0){cout<<"分母不能为0,请重新输入分母:"<<endl;cin>>b;}this->m_molecular=abs(a);this->m_denomilator=abs(b);if(a<0&&b<0)this->m_IsNegative=false;else if(a<0||b<0)this->m_IsNegative=true;elsethis->m_IsNegative=false;this->Simplification();}float CFraction::GetValue()const{return this->m_molecular/(float)m_denomilator;}void CFraction::Simplification(){int a=m_molecular,b=m_denomilator;int ret=Function(a,b);m_molecular/=ret;m_denomilator/=ret;}CFraction CFraction::operator +(const CFraction &f)const{CFraction temp;if(m_IsNegative==f.m_IsNegative)//同号相加{temp.m_molecular=m_molecular*f.m_denomilator+m_denomilator*f.m_molecular;temp.m_denomilator=m_denomilator*f.m_denomilator;temp.m_IsNegative=m_IsNegative;}else// 不同号{temp.m_molecular=abs(m_molecular*f.m_denomilator-m_denomilator*f.m_molecular);temp.m_denomilator=abs(m_denomilator*f.m_denomilator);if(this->GetValue()>f.GetValue())temp.m_IsNegative=m_IsNegative;elsetemp.m_IsNegative=f.m_IsNegative;}return temp;}void CFraction::Show(){cout<<*this;}CFraction CFraction::operator -(const CFraction &f) const{CFraction temp;if(m_IsNegative==f.m_IsNegative)//同号相减{temp.m_molecular=abs(m_molecular*f.m_denomilator-m_denomilator*f.m_molecular);temp.m_denomilator=m_denomilator*f.m_denomilator;if(GetValue()>=f.GetValue())temp.m_IsNegative=false;elsetemp.m_IsNegative=true;}else//异号相减{temp.m_molecular=m_molecular*f.m_denomilator+m_denomilator*f.m_molecular;temp.m_denomilator=m_denomilator*f.m_denomilator;temp.m_IsNegative=m_IsNegative;}return temp;}CFraction CFraction::operator *(const CFraction &f) const{CFraction temp;temp.m_molecular=m_molecular*f.m_molecular;temp.m_denomilator=m_denomilator*f.m_denomilator;//接下来确定符号if(m_IsNegative==f.m_IsNegative)//同号相乘符号为正temp.m_IsNegative=false;elsetemp.m_IsNegative=true;return temp;}CFraction CFraction::operator /(CFraction &f) const{CFraction temp,r;r=f.GetReciprocal();temp=*this*r;return temp;}CFraction CFraction::GetReciprocal(){CFraction temp;temp.m_denomilator=m_molecular;temp.m_molecular=m_denomilator;temp.m_IsNegative=m_IsNegative;return temp;}bool CFraction::operator ==(const CFraction &f) const{if(m_IsNegative!=f.m_IsNegative)//不同号肯定不相等return false;if(GetValue()==f.GetValue())return true;elsereturn false;}bool CFraction::operator <(const CFraction &f) const{if(m_IsNegative==f.m_IsNegative)//同号比较大小{if(GetValue()<f.GetValue()){if(m_IsNegative)return false;elsereturn true;}else if(GetValue()>f.GetValue()){if(m_IsNegative)return true;elsereturn false;}else//相等的分数return false;}else if(m_IsNegative)//左负友正return true;else// 左正右负return false;}bool CFraction::operator >(const CFraction& f)const//大于号小于号刚好相反{return (f<*this);}void CFraction::ChangeValue(int a,int b){*this=CFraction(a,b);}
希望对C++初学者有所帮助
C++真的很强大
努力学习中
- C++实现:分数类
- 分数类的实现
- c++ 实现分数类
- 实现最高的分数(c语言)
- c语言实现分数数列求和
- JAVA分数类的实现
- 实现分数类的重载
- C#实现的分数类
- Objective-C_分数类实现
- 用于处理分数的Objective-C类
- YTU-OJ-分数类的四则运算【C++】
- problem C: 分数类的乘法
- Problem C: 分数类的输出
- Problem C: 分数类的输出
- 分数化为有限小数或无限循环小数(c实现)
- C语言 两个分数的四则运算,用函数调用实现
- 用c语言实现比较两个分数的大小
- 分数的四则运算及化简(C语言实现)
- 20120305
- java下Class.forName的作用是什么,为什么要使用它
- 网络编程
- 使用ffmpeg sdk v3.2和vc6.0编译output_example.c
- 替换开头单词
- C++实现:分数类
- Silverlight 外观之样式, 模板, 视觉状态和视觉状态管理器
- 学习
- 【PM&PM】产品经理应订阅的13个团队博客, 值得收藏
- sun.misc.BASE64Encoder找不到的解决方法?
- Struts2框架第一讲
- Java并发学习笔记(8)发布逸出
- 关于位结构体和union的一些介绍
- MySQL IP字符串转数字存储过程