/* * Copyright (c) 2013, 煙台大學電腦學院 * All rights reserved. * 檔案名稱:text.cpp * 作者:胡穎 * 完成日期:2013年4月27日 * 版本號碼:v1.0 * * 輸入描述:無 * 問題描述:定義分數類,利用成員函數實現分數運算子的重載 * 程式輸出:輸出分數的運算結果 * 問題分析: * 演算法設計:略 */ #include <iostream>#include<cmath>using namespace std;class CFraction{private: int nume;//分子 int deno;//分母public: CFraction (int nu=0,int de=1):nume(nu),deno(de){} void display(); void simplify(); CFraction operator+(const CFraction &c); CFraction operator-(const CFraction &c); CFraction operator*(const CFraction &c); CFraction operator/(const CFraction &c); CFraction operator+(); CFraction operator-(); bool operator==(const CFraction &c); bool operator>=(const CFraction &c); bool operator<=(const CFraction &c); bool operator!=(const CFraction &c); bool operator>(const CFraction &c); bool operator<(const CFraction &c);};void CFraction::display(){ cout<<"("<<nume<<"/"<<deno<<")"<<endl;}void CFraction::simplify(){ int m,n,r; m=fabs(deno);//取絕對值 n=fabs(nume); while(r=m%n) { m=n; n=r; } deno/=n; nume/=n; if(deno<0) { deno=-deno; nume=-nume; }}CFraction CFraction::operator+(const CFraction &c){ CFraction t; t.deno=deno*c.deno; t.nume=nume*c.deno+c.nume*deno; t.simplify(); return t;}CFraction CFraction::operator-(const CFraction &c){ CFraction t; t.deno=deno*c.deno; t.nume=nume*c.deno-c.nume*deno; t.simplify(); return t;}CFraction CFraction::operator*(const CFraction &c){ CFraction t; t.deno=deno*c.deno; t.nume=nume*c.nume; t.simplify(); return t;}CFraction CFraction::operator/(const CFraction &c){ CFraction t; if(!c.deno) return *this; t.deno=deno*c.nume; t.nume=nume*c.deno; t.simplify(); return t;}CFraction CFraction::operator+(){ return *this;}CFraction CFraction::operator-(){ CFraction t; t.deno=-deno; t.nume=-nume; return t;}bool CFraction::operator==(const CFraction &c){ if(*this!=c)return false; return true;}bool CFraction::operator>=(const CFraction &c){ if(*this<c)return false; return true;}bool CFraction::operator<=(const CFraction &c){ if(*this>c)return false; return true;}bool CFraction::operator!=(const CFraction &c){ if(*this>c||*this<c)return true; return false;}bool CFraction::operator>(const CFraction &c){ int this_nume,c_nume,common_deno; this_nume=nume*c.deno; c_nume=c.nume*deno; common_deno=deno*c.deno; if((this_nume-c_nume)*common_deno>0)return true; return false;}bool CFraction::operator<(const CFraction &c){ int this_nume,c_nume,common_deno; this_nume=nume*c.deno; c_nume=c.nume*deno; common_deno=deno*c.deno; if((this_nume-c_nume)*common_deno<0)return true; return false;}int main(){ CFraction x(1,3),y(-5,10),s; cout<<"分數x=1/3 y=-5/10"<<endl; s=+x+y; cout<<"+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(); s=-x+y; cout<<"-x+y="; s.display(); x.display(); if (x>y) cout<<"大於"<<endl; if (x<y) cout<<"小於"<<endl; if (x==y) cout<<"等於"<<endl; y.display(); cout<<endl; return 0;}
運算結果: