分数类的构造

来源:互联网 发布:暴风影音怎么关闭网络 编辑:程序博客网 时间:2024/06/07 06:46

#include<iostream.h>//using namespace std;class CFraction{private:int nume;  // 分子int deno;  // 分母public:CFraction(int n=0,int d=0);CFraction operator +(CFraction &c);CFraction operator -(CFraction &c);CFraction operator *(CFraction &c);CFraction operator /(CFraction &c);CFraction operator +();CFraction operator -();CFraction operator ~();bool  operator >(CFraction &c);bool  operator <(CFraction &c);bool  operator >=(CFraction &c);bool  operator <=(CFraction &c);bool  operator !=(CFraction &c);bool  operator ==(CFraction &c);friend istream &operator>>(istream &input,CFraction &c);friend ostream &operator<<(ostream &input,CFraction &c);void display();void simplify();};CFraction::CFraction(int n,int d):nume(n),deno(d){}istream &operator >>(istream &input,CFraction &c){input>>c.nume>>c.deno;return input;}ostream &operator<<(ostream &output,CFraction &c){output<<c.nume<<"/"<<c.deno;return output;}CFraction CFraction::operator +(CFraction &c){CFraction result;result.deno=deno*c.deno;result.nume=nume*c.deno+deno*c.nume;return result;}CFraction CFraction::operator -(CFraction &c){CFraction result;result.deno=deno*c.deno;result.nume=nume*c.deno-deno*c.nume;return result;}CFraction CFraction::operator *(CFraction &c){CFraction result;result.deno=deno*c.deno;result.nume=nume*c.nume;return result;}CFraction CFraction::operator /(CFraction &c){CFraction result;result.deno=deno*c.nume;result.nume=nume*c.deno;return result;}bool CFraction::operator >(CFraction &c){double a=(double)nume/(double)deno;double b=(double)c.nume/(double)c.deno;if(a>b)return true;elsereturn false;}bool CFraction::operator <(CFraction &c){double a=(double)nume/(double)deno;double b=(double)c.nume/(double)c.deno;if(a<b)return true;elsereturn false;}bool CFraction::operator >=(CFraction &c){double a=(double)nume/(double)deno;double b=(double)c.nume/(double)c.deno;if(a>=b)return true;elsereturn false;}bool CFraction::operator <=(CFraction &c){double a=(double)nume/(double)deno;double b=(double)c.nume/(double)c.deno;if(a<=b)return true;elsereturn false;}bool CFraction::operator ==(CFraction &c){double a=(double)nume/(double)deno;double b=(double)c.nume/(double)c.deno;if(a==b)return true;elsereturn false;}bool CFraction::operator !=(CFraction &c){double a=(double)nume/(double)deno;double b=(double)c.nume/(double)c.deno;if(a!=b)return true;elsereturn false;}CFraction CFraction::operator +(){return CFraction(nume,deno);}CFraction CFraction::operator -()//相反数{return CFraction(-nume,deno);}CFraction CFraction::operator ~()//倒数{    CFraction x;    x.nume=deno;    x.deno=nume;     if(x.deno<0)    {        x.deno=-x.deno;        x.nume=-x.nume;    }    return x;}void CFraction::display(){cout<<nume<<"/"<<deno<<endl;}void CFraction::simplify(){int n;int a=nume;int b=deno;while(n=a%b)//求最大公约数{a=b;b=n;}nume/=b;deno/=b;if(deno<0)//保证符号在分子上{nume=-nume;deno=-deno;}}int main(){CFraction c1(3,2),c2(9,7),c3,c4(9,1);cout<<"c1:"<<c1<<endl;cout<<"c2:"<<c2<<endl;c3=c1+c2;cout<<"c1+c2:"<<c3<<endl;c3=c1-c2;cout<<"c1-c2:"<<c3<<endl;c3=c1*c2;c3.simplify();cout<<"c1*c2:"<<c3<<endl;c3=c1/c2;c3.simplify();cout<<"c1/c2:"<<c3<<endl;if(c1>c2)cout<<"比较:"<<c1<<">"<<c2<<endl;cout<<"-c1:"<<-c1<<endl;cout<<"+c1:"<<+c1<<endl;cout<<"~c4:"<<~c4<<endl;return 0;}

运行结果:


0 0
原创粉丝点击