8_3分數類的運算子過載
阿新 • • 發佈:2019-02-03
#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; }