15第八周项目3——分数类中的运算符重载(1)
15第八周项目三——分数类中的运算符重载(1)
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 4 月 29 日
* 版 本 号:v1.0
*
* 问题描述:实现分数中的运算符重载,在分数类中可以完成和分数的加减乘除(运算后化简),比较(6中关系)的运算,。
* 输入描述:
* 程序输出:运算结果
*/
#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(); 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); }; 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 CFraction::operator + (const CFraction &c) { CFraction d; d.nume=nume*c.deno+c.nume*deno; d.deno=deno*c.deno; d.simplify(); return d; } CFraction CFraction:: operator - (const CFraction &c) { CFraction d; d.nume=nume*c.deno-c.nume*deno; d.deno=deno*c.deno; d.simplify(); return d; } CFraction CFraction:: operator * (const CFraction &c) { CFraction d; d.nume=nume*c.nume; d.deno=deno*c.deno; d.simplify(); return d; } CFraction CFraction:: operator / (const CFraction &c) { CFraction d; if (c.nume==0) return *this; d.nume=nume*c.deno; d.deno=deno*c.nume; d.simplify(); return d; } bool CFraction::operator > (const CFraction &c) { int c1_nume,c2_nume,common_deno; c1_nume=nume*c.deno; c2_nume=c.nume*deno; common_deno=deno*c.deno; if ((c1_nume-c2_nume)*common_deno>0) return true; return false; } bool CFraction::operator<(const CFraction &c) { int c1_nume,c2_nume,common_deno; c1_nume=nume*c.deno; c2_nume=c.nume*deno; common_deno=deno*c.deno; if ((c1_nume-c2_nume)*common_deno<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 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(); cout<<endl<<endl; c1.display(); if (c1>c2) cout<<"大于"; if (c1<c2) cout<<"小于"; if (c1==c2) cout<<"等于"; c2.display(); cout<<endl; return 0; }