实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始工作。
/* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:赵嵩 * 文件:Demo.cpp * 完成时间:2015年05月16日 * 版本号:v1.0 */ #include <iostream> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 CFraction(int n=1,int d=1); CFraction operator+(CFraction &d); CFraction operator-(CFraction &d); CFraction operator*(CFraction &d); CFraction operator/(CFraction &d); 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 setCFraction(int n,int d); void display(); void simplify(); }; int gcd(int m, int n); //重载函数的实现及用于测试的main()函数 CFraction :: CFraction(int n,int d) { nume=n; deno=d; } void CFraction::setCFraction(int n, int d) { nume=n; deno=d; } void CFraction::display() { cout<<nume<<"/"<<deno<<endl; } void CFraction::simplify()//化简 { int n=gcd(deno, nume); deno/=n; nume/=n; } int gcd(int m, int n) //求最大公约数 { int r; if (m<n) { r=m; m=n; n=r; } while(r=m%n) { m=n; n=r; } return n; } CFraction CFraction::operator+(CFraction &d) { CFraction m; m.nume=nume*d.deno+d.nume*deno; m.deno=deno*d.deno; m.simplify(); return m; } CFraction CFraction::operator-(CFraction &d) { CFraction m; m.nume=nume*d.deno-d.nume*deno; m.deno=deno*d.deno; m.simplify(); return m; } CFraction CFraction::operator*(CFraction &d) { CFraction m; m.nume=nume*d.nume; m.deno=deno*d.deno; m.simplify(); return m; } CFraction CFraction::operator/(CFraction &d) { CFraction m; m.nume=nume*d.deno; m.deno=deno*d.nume; m.simplify(); return m; } bool CFraction::operator>(const CFraction &c) { int anume1,anume2,both; both=this->deno*c.deno; anume1=nume*c.deno; anume2=c.nume*deno; if ((anume1>anume2&&both>0)||(anume1<anume2&&both<0)) return true; return false; } bool CFraction::operator<(const CFraction &c) { int anume1,anume2,both; both=this->deno*c.deno; anume1=nume*c.deno; anume2=c.nume*deno; if ((anume1-anume2)*both<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) 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; } int main() { CFraction x(1,3),y(-5,10),s; cout<<"分数x=1/3 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<<"大于"<<endl; if (x<y) cout<<"小于"<<endl; if (x==y) cout<<"等于"<<endl; y.display(); cout<<endl; return 0; }
运行结果:
时间: 2024-10-17 17:41:38