分数类中的运算符重载

来源:互联网 发布:sql分组累计求和 编辑:程序博客网 时间:2024/05/16 10:37

#include <iostream> using namespace std;class CFraction{public:CFraction(int nu=0,int de=1);void input();                //按照"nu/de"的格式,如"5/2"的形式输入void output(); //输出int gys(int nu,int de);      //找寻最大公约数int fabs(int x); //取正void simplify();             //分数化简bool operator>(CFraction &c);bool operator<(CFraction &c);bool operator>=(CFraction &c);bool operator<=(CFraction &c);bool operator==(CFraction &c);bool operator!=(CFraction &c);CFraction operator+(CFraction &c);CFraction operator-(CFraction &c);CFraction operator*(CFraction &c);CFraction operator/(CFraction &c);private:int nume;  // 分子int deno;  // 分母};CFraction::CFraction(int nu,int de){if (de!=0)  //没考虑到分母不为0    {          nume=nu;          deno=de;      }      else      {          cerr<<"初始化中发生错误,程序退出\n";          exit(0);     }  }void CFraction::input(){char a;cout<<"请输入分子/分母:";while(1){cin>>nume>>a>>deno;if(a!='/')cout<<"格式不正确,请重新输入"<<endl;else if (deno==0)  //这步写漏了            cout<<"分母不能为零!\n "; elsebreak;}}void CFraction::output(){cout<<nume<<"/"<<deno<<endl;}int CFraction::gys(int nu,int de){int k,i;k=nu<de?nu:de;for(i=k;i>0;i--){if(nu%i==0&&de%i==0)break;}return i;}int CFraction::fabs(int x){if(x>=0) return x;return -x;}void CFraction::simplify() {if(nume!=0){int m,n;m=fabs(deno);n=fabs(nume);int i=gys(m,n);deno/=i;nume/=i;}if(deno<0)// 将分母转化为正数 {deno=-deno;nume=-nume;}}//比较运算符重载bool CFraction::operator>(CFraction &c){int i=deno*c.deno;int n1=nume*i/deno;int n2=c.nume*i/c.deno;if(n1>n2) return true;return false;}bool CFraction::operator<(CFraction &c){int i=deno*c.deno;int n1=nume*i/deno;int n2=c.nume*i/c.deno;if(n1<n2) return true;return false;}bool CFraction::operator>=(CFraction &c){if(*this<c) return false;return true;}bool CFraction::operator<=(CFraction &c){if(*this>c) return false;return true;}bool CFraction::operator==(CFraction &c){if(*this>c||*this<c) return false;return true;}bool CFraction::operator!=(CFraction &c){if(*this==c) return false;return true;}//加减乘除运算符重载CFraction CFraction::operator+(CFraction &c){int i=deno*c.deno;int n=nume*i/deno+c.nume*i/c.deno;CFraction a(n,i);a.simplify();return a;}CFraction CFraction::operator-(CFraction &c){int i=deno*c.deno;int n=nume*i/deno-c.nume*i/c.deno;CFraction a(n,i);a.simplify();return a;}CFraction CFraction::operator*(CFraction &c){int n=nume*c.nume;int d=deno*c.deno;CFraction a(n,d);a.simplify();return a;}CFraction CFraction::operator/(CFraction &c){int n=nume*c.deno;int d=deno*c.nume;CFraction a(n,d);a.simplify();return a;}int main(){CFraction a,b,c;a.input();b.input();cout<<"a>b"<<(a>b?"是":"不是")<<"正确"<<endl;cout<<"a<b"<<(a<b?"是":"不是")<<"正确"<<endl;cout<<"a>=b"<<(a>=b?"是":"不是")<<"正确"<<endl;cout<<"a<=b"<<(a<=b?"是":"不是")<<"正确"<<endl;cout<<"a==b"<<(a==b?"是":"不是")<<"正确"<<endl;cout<<"a!=b"<<(a!=b?"是":"不是")<<"正确"<<endl;c=a+b;cout<<"a+b=";c.output(); c=a-b;cout<<"a-b=";c.output();c=a*b;cout<<"a*b=";c.output();c=a/b;cout<<"a/b=";c.output();return 0;}


运行结果:

0 0
原创粉丝点击