1. 程式人生 > >8_3分數類的運算子過載

8_3分數類的運算子過載

#include <iostream>
using namespace std;
class CFraction
{private:
int nume;  // 分子
int deno;  // 分母
public:
	//建構函式及運算子過載的函式宣告
	CFraction(int nu=0,int de=1):nume(nu),deno(de){}
	CFraction operator+(CFraction a);
	CFraction operator-(CFraction a);	
	CFraction operator*(CFraction a);
	CFraction operator/(CFraction a);
	void simplify();				//化簡(使分子分母沒有公因子)
	void display();
};
void CFraction::simplify()				//化簡(使分子分母沒有公因子)
{
	int a,b,c,d;
	int num1,num2,temp;				
	num1=nume;
	num2=deno;
	c=nume;
	d=deno;
	if(num1>num2) /*找出兩個數中的較大值*/
	{
		temp=num1; num1=num2; num2=temp; /*交換兩個整數*/
	}
	a=num1; b=num2;
	while(b!=0) /*採用輾轉相除法求最大公約數*/
	{
		temp=a%b;
		a=b;
		b=temp;
	}
	nume=nume/a;
	deno=deno/a;
}
void CFraction::display()
{	
	if(deno<0)
	{
		deno=-deno;
		nume=-nume;
	}
	cout<<nume<<"/"<<deno<<endl;	
}
// 分數相加
CFraction CFraction::operator+(const CFraction a)
{
	CFraction t;
	t.nume=nume*a.deno+a.nume*deno;
	t.deno=deno*a.deno;
	t.simplify();
	return t;
}

// 分數相減
CFraction CFraction:: operator-(CFraction a)
{
	CFraction t;
	t.nume=nume*a.deno-a.nume*deno;
	t.deno=deno*a.deno;
	t.simplify();
	return t;
}

// 分數相乘
CFraction CFraction:: operator*(CFraction a)
{
	CFraction t;
	t.nume=nume*a.nume;
	t.deno=deno*a.deno;
	t.simplify();
	return t;
}

// 分數相除
CFraction CFraction:: operator/(CFraction a)
{
	CFraction t;
	t.nume=nume*a.deno;
	t.deno=deno*a.nume;
	t.simplify();
	return t;
}
int main()
{
	CFraction x(1,3),y(-5,10),s;
	cout<<"分數x=1/3      y=-5/10"<<endl;
	s=x+y;
	s.display();
	s=x-y;
	cout<<"x-y=";
	s.display();
	s=x*y;
	cout<<"x*y=";
	s.display();
	s=x/y;
	cout<<"x/y=";
	s.display();
	return 0;
}