/** 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 simplify(); friend ostream&operator<<(ostream &,CFraction &); friend istream&operator>>(istream &,CFraction &); 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::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;}ostream&operator<<( ostream &output,CFraction &c){ output<<c.nume<<"/"<<c.deno<<endl; return output;}istream&operator>>( istream&input,CFraction &c){ cout<<"請輸入分數:"<<endl; input>>c.nume>>c.deno; return input;}int main(){ CFraction x,y,s; cin>>x>>y; cout<<"x="<<x; cout<<"y="<<y; s=+x+y; cout<<"+x+y="<<s; s=x-y; cout<<"x-y="<<s; s=x*y; cout<<"x*y="<<s; s=x/y; cout<<"x/y="<<s; s=-x+y; cout<<"-x+y="<<s; cout<<x; if (x>y) cout<<"大於"<<endl; if (x<y) cout<<"小於"<<endl; if (x==y) cout<<"等於"<<endl; cout<<y; cout<<endl; return 0;}
運行結果: