实现一个分数类,并重载其加减运算
#include <iostream>
#include <string.h>
using namespace std;
class Fraction{
private:
int a; //分子
int b; //分母
int divisor(int p, int q); //求最大公约数
public:
Fraction(){a=0;b=1;} //无参构造函数
Fraction(int,int);
void set(int aa,int bb); //设置分子分母
void show(); //显示分数
Fraction add(Fraction b); //加上另一个分数
Fraction operator+(Fraction u); //重载+运算符
bool operator==(Fraction u); //重载==运算符
Fraction operator-(); //求负运算符
~Fraction(){}; //析构函数
};
Fraction::Fraction(int x,int y) //有参构造函数
{
set(x,y);
}
void Fraction::set(int aa,int bb) //设置分子分母
{
a=aa;
if(bb!=0) //如果分母不为零
b=bb;
else
{
a=0;
b=1;
}
}
void Fraction::show() //显示分数
{
cout<<a<<"/"<<b;
}
Fraction Fraction::add(Fraction u) //分数相加
{
int tmp;
Fraction v;
v.a=a*u.b+b*u.a; //新分子
v.b=b*u.b; //新分母
tmp=divisor(v.a,v.b); //计算分子分母的公约数
v.a=v.a/tmp; //约去分子的公约数
v.b=v.b/tmp; //约去分母的公约数
return v; //返回最简结果
}
Fraction Fraction::operator+(Fraction u) //运算符+重载
{
int tmp;
Fraction v;
v.a=a*u.b+b*u.a; //新分子
v.b=b*u.b; //新分母
tmp=divisor(v.a,v.b); //计算分子分母的公约数
v.a=v.a/tmp; //约去分子的公约数
v.b=v.b/tmp; //约去分母的公约数
return v; //返回最简结果
}
bool Fraction::operator==(Fraction u) //运算符==重载
{
float x,y;
x=(float)a/b;
y=(float)u.a/u.b;
if(x==y)
return true;
else
return false;
}
Fraction Fraction::operator-() //求负运算符
{
a=a*(-1);
return *this;
}
int Fraction::divisor(int p,int q) //求最大公约数
{
int r;
if(p<q)
{
int tmp;
tmp=p;
p=q;
q=tmp;
}
r=p%q;
while(r!=0)
{
p=q;
q=r;
r=p%q;
}
return q;
}
int main( )
{
Fraction f1,f2,f3; //声明3个分数
f1.set(4,-5);
f2.set(3,6);
f1.show();
cout<<" + ";
f2.show();
f3=f1+f2; //计算f1+f2
cout<<" = ";
f1.set(6,-20);
if(f1==f3)
cout<<"\nf1 == f2"<<endl;
else
cout<<"f1 != f3";
f2=(-f2); //测试求负函数
f2.show();
return 0;
}
测试结果:
来自西安交通大学MOOC课件