1. 程式人生 > >C++ 封裝分數類(加減乘除大於小於)

C++ 封裝分數類(加減乘除大於小於)

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;
}