分数类中的运算符重载(2)

/** Copyright (c) 2014, 烟台大学计算机学院* All rights reserved.* 文件名称:test.cpp* 作 者:李晓凯* 完成日期:2015年4 月 2 日* 版 本 号:v1.0** 问题描述:在(1)的基础上,实现分数类中的对象和整型数的四则运算,分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction(1,3),b;int i=2;可以完成b=a+i;。同样,可以完成i+a,45+a,a*27,5/a,等各种运算。

* 输入描述:* 程序输出:运算结果

*/

#include <iostream>#include <Cmath>using namespace std;int gcd(int a,int b);class CFraction{private:int nume; // 分子int deno; // 分母public:CFraction(int n=0,int d=1):nume(n),deno(d) {}void simplify();void display();friend CFraction operator + (const CFraction &c1,const CFraction &c2);friend CFraction operator – (const CFraction &c1,const CFraction &c2);friend CFraction operator * (const CFraction &c1,const CFraction &c2);friend CFraction operator / (const CFraction &c1,const CFraction &c2);friend CFraction operator + (int i,const CFraction &c);friend CFraction operator + (const CFraction &c,int i);friend CFraction operator – (int i,const CFraction &c);friend CFraction operator – (const CFraction &c,int i);friend CFraction operator * (int i,const CFraction &C);friend CFraction operator * (const CFraction &c,int i);friend CFraction operator / (int i,const CFraction &c);friend CFraction operator / (const CFraction &c,int i);friend bool operator > (const CFraction &c1,const CFraction &c2);friend bool operator < (const CFraction &c1,const CFraction &c2);friend bool operator == (const CFraction &c1,const CFraction &c2);friend bool operator != (const CFraction &c1,const CFraction &c2);friend bool operator >= (const CFraction &c1,const CFraction &c2);friend bool operator <= (const CFraction &c1,const CFraction &c2);friend bool operator > (int i,const CFraction &c);friend bool operator > (const CFraction &c,int i);friend bool operator < (int i,const CFraction &c);friend bool operator < (const CFraction &c,int i);friend bool operator == (int i,const CFraction &c);friend bool operator == (const CFraction &c,int i);friend bool operator != (int i,const CFraction &c);friend bool operator != (const CFraction &c,int i);friend bool operator >= (int i,const CFraction &c);friend bool operator >= (const CFraction &c,int i);friend bool operator <= (int i,const CFraction &c);friend bool operator <= (const CFraction &c,int i);CFraction operator + ();//取正一目函数CFraction operator – ();//取反一目函数};void CFraction::simplify(){int n;n=gcd(nume,deno);deno/=n;nume/=n;if (deno<0){deno=-deno;nume=-nume;}}int gcd(int a,int b){int m;while(b!=0){m=a%b;a=b;b=m;}return a;}void CFraction::display(){cout<<"("<<nume<<"/"<<deno<<")";}CFraction operator + (const CFraction &c1,const CFraction &c2){CFraction d;d.nume=c1.nume*c2.deno+c2.nume*c1.deno;d.deno=c1.deno*c2.deno;d.simplify();return d;}CFraction operator – (const CFraction &c1,const CFraction &c2){CFraction d;d.nume=c1.nume*c2.deno-c2.nume*c1.deno;d.deno=c1.deno*c2.deno;d.simplify();return d;}CFraction operator * (const CFraction &c1,const CFraction &c2){CFraction d;d.nume=c1.nume*c2.nume;d.deno=c1.deno*c2.deno;d.simplify();return d;}CFraction operator / (const CFraction &c1,const CFraction &c2){CFraction d;if (c2.nume==0)return c1;d.nume=c1.nume*c2.deno;d.deno=c1.deno*c2.nume;d.simplify();return d;}CFraction operator + (int i,const CFraction &c){CFraction s(c.nume+i*c.deno,c.deno);s.simplify();return s;}CFraction operator + (const CFraction &c,int i){CFraction s(c.nume+i*c.deno,c.deno);s.simplify();return s;}CFraction operator – (int i,const CFraction &c){CFraction s(c.nume-i*c.deno,c.deno);s.simplify();return s;}CFraction operator – (const CFraction &c,int i){CFraction s(c.nume-i*c.deno,c.deno);s.simplify();return s;}CFraction operator * (int i,const CFraction &c){CFraction s(c.nume*i,c.deno);s.simplify();return s;}CFraction operator * (const CFraction &c,int i){CFraction s(c.nume*i,c.deno);s.simplify();return s;}CFraction operator / (int i,const CFraction &c){CFraction s(c.nume,c.deno*i);s.simplify();return s;}CFraction operator / (const CFraction &c,int i){CFraction s(c.nume,c.deno*i);s.simplify();return s;}bool operator > (const CFraction &c1,const CFraction &c2){int c1_nume,c2_nume,common_deno;c1_nume=c1.nume*c2.deno;c2_nume=c2.nume*c1.deno;common_deno=c1.deno*c2.deno;if ((c1_nume-c2_nume)*common_deno>0)return true;return false;}bool operator<(const CFraction &c1,const CFraction &c2){int c1_nume,c2_nume,common_deno;c1_nume=c1.nume*c2.deno;c2_nume=c2.nume*c1.deno;common_deno=c1.deno*c2.deno;if ((c1_nume-c2_nume)*common_deno<0)return true;return false;}bool operator==(const CFraction &c1,const CFraction &c2){if (c1!=c2)return false;return true;}bool operator!=(const CFraction &c1,const CFraction &c2){if (c1>c2 || c1<c2)return true;return false;}bool operator>=(const CFraction &c1,const CFraction &c2){if (c1<c2)return false;return true;}bool operator<=(const CFraction &c1,const CFraction &c2){if (c1>c2)return false;return true;}CFraction CFraction::operator+(){CFraction c;c.nume=nume;c.deno=deno;c.simplify();return c;}CFraction CFraction::operator-(){CFraction c;c.nume=-nume;c.deno=-deno;c.simplify();return c;}int main(){CFraction c1(1,3),c2(-5,10),s;cout<<"分数:"<<endl<<"c1=";c1.display();cout<<endl;cout<<"c2=";c2.display();cout<<endl<<endl;s=+c1+c2;cout<<"+c1+c2=";s.display();cout<<endl;s=c1-c2;cout<<"c1-c2=";s.display();cout<<endl;s=c1*c2;cout<<"c1*c2=";s.display();cout<<endl;s=c1/c2;cout<<"c1/c2=";s.display();s=-c1-c2;cout<<"-c1-c2=";s.display();cout<<endl<<endl;c1.display();if (c1>c2) cout<<"大于";if (c1<c2) cout<<"小于";if (c1==c2) cout<<"等于";c2.display();cout<<endl;CFraction c3(7,4),c4;c4=c3+4;cout<<"c3+4=";c4.display();c4=4+c3;cout<<'\t'<<"4+c3=";c4.display();cout<<endl;c4=c3-2;cout<<"c3-2=";c4.display();c4=2-c3;cout<<'\t'<<"3-c3=";c4.display();cout<<endl;c4=c3*2;cout<<"c3*2=";c4.display();c4=2*c3;cout<<'\t'<<"2*c3=";c4.display();cout<<endl;c4=c3/2;cout<<"c3/2=";c4.display();c4=2/c3;cout<<'\t'<<"2/c3=";c4.display();cout<<endl;return 0;}在泪水中浸泡过的微笑最灿烂,从迷惘中走出来的灵魂最清醒。

分数类中的运算符重载(2)

相关文章:

你感兴趣的文章:

标签云: