#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 simplfy(); void display(); CFraction operator+(const CFraction &c); //分数相加,结果要化简 CFraction operator-(const CFraction &c); //分数相减,结果要化简 CFraction operator*(const CFraction &c); //分数相乘,结果要化简 CFraction 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); bool operator<=(const CFraction &c); }; //重载函数的实现及用于测试的main()函数 void CFraction::simplfy()//分数化简 { 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; } } void CFraction::display() { cout<<"("<<nume<<"/"<<deno<<")"<<endl; } CFraction CFraction::operator+(const CFraction &c) { CFraction t; t.deno=deno*c.deno; t.nume=deno*c.nume+c.deno*nume; t.simplfy(); return t; } CFraction CFraction::operator-(const CFraction &c) { CFraction t; t.deno=deno*c.deno; t.nume=deno*c.nume-c.deno*nume; t.simplfy(); return t; } CFraction CFraction::operator*(const CFraction &c) { CFraction t; t.deno=deno*c.deno; t.nume=nume*c.nume; t.simplfy(); return t; } CFraction CFraction::operator/(const CFraction &c) { CFraction t; if (!c.nume) return *this; //除法无效时,这种情况需要考虑,但这种处理仍不算合理 t.deno=deno*c.nume; t.nume=nume*c.deno; t.simplfy(); return t; } //比较大小 bool CFraction::operator>(const CFraction &c) { int thisnume,cnume,commondeno; thisnume=nume*c.deno; cnume=c.nume*deno; commondeno=deno*c.deno; if ((thisnume>cnume&&commondeno>0)|| (thisnume<cnume&&commondeno<0)) return true; // 将通分后的分子比较大 return false; } bool CFraction::operator<(const CFraction &c) { int thisnume,cnume,commondeno; thisnume=nume*c.deno; cnume=c.nume*deno; commondeno=deno*c.deno; if ((thisnume-cnume)*commondeno<0) return true; return false; } 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) { if(*this<c) return false; return true; } bool CFraction::operator<=(const CFraction &c) { if(*this>c) return false; return true; } int main() { CFraction x(1,3),y(-5,10),s; cout<<"分数:x=1/3"<<endl; cout<<"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(); x.display(); if (x>y) cout<<"大于"; if (x<y) cout<<"小于"; if (x==y) cout<<"等于"; y.display(); cout<<endl; return 0; }
8.3
最新推荐文章于 2024-06-19 15:11:34 发布