c++ 实现分数类

编程入门 行业动态 更新时间:2024-10-09 06:30:26

c++ 实现<a href=https://www.elefans.com/category/jswz/34/1769470.html style=分数类"/>

c++ 实现分数类

/** fraction.h* 此分数类在输入分数后符号将只储存在分子位上,分母为正数。在进行加减乘除运算后会自动进行约分,也可自己执行约分操作。*  Created on: 2016年11月18日*  */#ifndef FRACTION_H_
#define FRACTION_H_class fraction{private:int numerator; //定义分子int denominator;  //定义分母int maxFactor(int nr,int dr);  //求最大公约数public:fraction(int numerator, int denominator = 1);  //构造函数void print() const;                            //输出fraction operator+(const fraction& rv) const;  //重载 +fraction operator-(const fraction& rv) const;  //重载 -fraction operator*(const fraction& rv) const;  //重载*fraction operator/(const fraction& rv) const;  //重载 /fraction operator-();                          //重载单目运算符-fraction& operator=(const fraction& rv);       //重载=bool operator>(const fraction& rv) const;      //重载>bool operator>=(const fraction& rv) const;     //重载>=bool operator<(const fraction& rv) const;      //重载<bool operator<=(const fraction& rv) const;     //重载<=bool operator==(const fraction& rv) const;     //重载==bool operator!=(const fraction& rv) const;     //重载!=void fractionReduction();                      //约分void reciprocal();                             //倒数~fraction();                                   //析构函数
};//处理当 int 类型在双目运算符左边时的情形,在右边可由编译器自动代入构造函数
const fraction operator+(int, const fraction&);
const fraction operator-(int, const fraction&);
const fraction operator*(int, const fraction&);
const fraction operator/(int, const fraction&);
const bool operator>(int, const fraction&);
const bool operator>=(int, const fraction&);
const bool operator<(int, const fraction&);
const bool operator<=(int, const fraction&);
const bool operator==(int, const fraction&);
const bool operator!=(int, const fraction&);#endif /* FRACTION_H_ */
//============================================================================
// Name        : fraction.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================#include <iostream>
#include "fraction.h"
using namespace std;#define ABS(x) ((x>0)?x:-x)const fraction operator+(int x, const fraction& rv)
{return fraction(x) + rv;
}const fraction operator-(int x, const fraction& rv)
{return fraction(x) - rv;
}const fraction operator*(int x, const fraction& rv)
{return fraction(x) * rv;
}const fraction operator/(int x, const fraction& rv)
{return fraction(x) / rv;
}const bool operator>(int x, const fraction& rv)
{return fraction(x) > rv;
}const bool operator>=(int x, const fraction& rv)
{return fraction(x) >= rv;
}const bool operator<(int x, const fraction& rv)
{return fraction(x) < rv;
}const bool operator<=(int x, const fraction& rv)
{return fraction(x) <= rv;
}const bool operator==(int x, const fraction& rv)
{return fraction(x) == rv;
}const bool operator!=(int x, const fraction& rv)
{return fraction(x) != rv;
}fraction::fraction(int numerator, int denominator)
{if((numerator>=0 && denominator>0)|| (numerator<=0 && denominator<0)){this->numerator = ABS(numerator);this->denominator = ABS(denominator);}else{this->numerator = -ABS(numerator);this->denominator = ABS(denominator);}}fraction fraction::operator+(const fraction& rv) const
{fraction a = fraction(numerator*rv.denominator + rv.numerator*denominator, denominator*rv.denominator);a.fractionReduction();return a;
}fraction fraction::operator-(const fraction& rv) const
{fraction a = fraction(numerator*rv.denominator - rv.numerator*denominator, denominator*rv.denominator);a.fractionReduction();return a;
}fraction fraction::operator*(const fraction& rv) const
{fraction a = fraction(numerator * rv.numerator, denominator * rv.denominator);a.fractionReduction();return a;
}fraction fraction::operator/(const fraction& rv) const
{fraction a = fraction(numerator * rv.denominator, denominator * rv.numerator);a.fractionReduction();return a;
}fraction fraction::operator-()
{numerator = -numerator;return *this;
}fraction& fraction::operator=(const fraction& rv)
{numerator=rv.numerator;denominator=rv.denominator;return *this;
}bool fraction::operator>(const fraction& rv) const
{if(numerator*rv.denominator > rv.numerator*denominator)return true;elsereturn false;
}bool fraction::operator>=(const fraction& rv) const
{if(numerator*rv.denominator >= rv.numerator*denominator)return true;elsereturn false;
}bool fraction::operator<(const fraction& rv) const
{if(numerator*rv.denominator < rv.numerator*denominator)return true;elsereturn false;
}bool fraction::operator<=(const fraction& rv) const
{if(numerator*rv.denominator <= rv.numerator*denominator)return true;elsereturn false;
}bool fraction::operator==(const fraction& rv) const
{if(numerator*rv.denominator == rv.numerator*denominator)return true;elsereturn false;
}bool fraction::operator!=(const fraction& rv) const
{if(numerator*rv.denominator != rv.numerator*denominator)return true;elsereturn false;
}void fraction::print() const
{if(denominator==1){cout << numerator<< endl;}elsecout << numerator << "/" << denominator << endl;
}int fraction::maxFactor(int nr,int dr)
{int th=nr,tl=dr;if(nr<dr){th=dr;tl=nr;}if(th%tl==0)return tl;elsereturn maxFactor(tl,th%tl);
}void fraction::fractionReduction()
{int a = maxFactor(ABS(denominator), ABS(numerator));if(a>1){denominator /= a;numerator /= a;}if((numerator>=0 && denominator>0)|| (numerator<=0 && denominator<0)){numerator = ABS(numerator);denominator = ABS(denominator);}else{numerator = -ABS(numerator);denominator = ABS(denominator);}
}void fraction::reciprocal()
{if(numerator>=0){int temp = numerator;numerator = denominator;denominator = temp;}else{int temp = numerator;numerator = -denominator;denominator = ABS(temp);}
}fraction::~fraction()
{
}




更多推荐

c++ 实现分数类

本文发布于:2024-03-23 20:48:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1742665.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!