C++ 封装分数类,话少说直接上代码
/*****************************************************************************************/
fraction.h代码
#pragma once
#include <iostream>
using namespace std;
class fraction
{
public:
fraction(int numerator,int denominator );
~fraction(void);
fraction operator +(const fraction other );//加法
fraction operator -(const fraction other );//减法
fraction operator *(const fraction other );//乘法
fraction operator /(const fraction other );//除法
bool operator > (const fraction other); //大小比较
bool operator <(const fraction other); //大小比较
bool operator == (const fraction other); //等于比较
private:
//最大公约数
int MaxCommonFactor(int fractiona,int fractionb);
//最小公倍数
int MinCommonMultiple(int fractiona,int fractionb);
private:
int mNumerator;//分子
int mDenominator;//分母
};
/*****************************************************************************************/
fraction.cpp 代码
#include "fraction.h"
fraction::fraction(int numerator,int denominator):
mNumerator(numerator),
mDenominator(denominator)
{
if (denominator==0)
{
cout << "分母不能为0! " << endl;
exit(0);//直接退出
}
printf("成功创建分数:%d/%d\n",numerator,denominator);
}
fraction::~fraction(void)
{
}
fraction fraction::operator +(const fraction other )
{
fraction temp(1,1);;
temp.mNumerator=mNumerator*other.mDenominator+other.mNumerator*mDenominator;//求分子
temp.mDenominator=mDenominator*other.mDenominator; //求分
int commonfactor = MaxCommonFactor(temp.mNumerator,temp.mDenominator); //约分
if (commonfactor!=1)
{
temp.mNumerator=temp.mNumerator/commonfactor;
temp.mDenominator=temp.mDenominator/commonfactor;
}
printf("分数和:%d/%d\n",temp.mNumerator,temp.mDenominator);
return temp;
}
fraction fraction::operator -(const fraction other )
{
fraction temp(1,1);;
temp.mNumerator=mNumerator*other.mDenominator-other.mNumerator*mDenominator;//求分子
temp.mDenominator=mDenominator*other.mDenominator; //求分母
int commonfactor = MaxCommonFactor(temp.mNumerator,temp.mDenominator); //约分
if (commonfactor!=1)
{
temp.mNumerator=temp.mNumerator/commonfactor;
temp.mDenominator=temp.mDenominator/commonfactor;
}
printf("分数差:%d/%d\n",temp.mNumerator,temp.mDenominator);
return temp;
}
fraction fraction::operator *(const fraction other )
{
fraction temp(1,1);
temp.mNumerator=mNumerator*other.mNumerator; //求分子
temp.mDenominator=mDenominator*other.mDenominator; //求分母
int commonfactor = MaxCommonFactor(temp.mNumerator,temp.mDenominator); //约分
if (commonfactor!=1)
{
temp.mNumerator=temp.mNumerator/commonfactor;
temp.mDenominator=temp.mDenominator/commonfactor;
}
printf("分数积:%d/%d\n",temp.mNumerator,temp.mDenominator);
return temp;
}
fraction fraction::operator /(const fraction other )
{
fraction temp(1,1);
if (other.mNumerator==0)
{
printf("除数不能为0!\n");
}
temp.mNumerator=mNumerator*other.mDenominator;//求分子
temp.mDenominator=mDenominator*other.mNumerator; //求分母
int commonfactor = MaxCommonFactor(temp.mNumerator,temp.mDenominator); //约分
if (commonfactor!=1)
{
temp.mNumerator=temp.mNumerator/commonfactor;
temp.mDenominator=temp.mDenominator/commonfactor;
}
printf("分数商:%d/%d\n",temp.mNumerator,temp.mDenominator);
return temp;
}
int fraction::MaxCommonFactor(int fractiona,int fractionb)
{
int tem = fractiona>fractionb?fractionb:fractiona;//找出较小的数字
int commonfactor=1;
for (int i=1;i<=tem;i++)
{
if ((fractiona%i==0)&&(fractionb%i==0))
{
commonfactor=i;
}
}
return commonfactor;
}
bool fraction::operator > (const fraction other)
{
fraction temp(1,1);
temp =*this-other;
if (temp.mNumerator==0)
{
return false;
}
int result = temp.mNumerator/temp.mDenominator;
if (result<0)
{
return false;
}else
{
return true;
}
}
bool fraction::operator <(const fraction other)
{
fraction temp(1,1);
temp =*this-other;
if (temp.mNumerator==0)
{
return false;
}
int result = temp.mNumerator/temp.mDenominator;
if (result<0)
{
return true;
}else
{
return false;
}
}
bool fraction::operator == (const fraction other)
{
fraction temp(1,1);
temp =*this-other;
if (temp.mNumerator==0)
{
return true;
}
return false;
}