/项目3-分数类中的运算符重载

来源:互联网 发布:编程源代码是什么意思 编辑:程序博客网 时间:2024/06/07 00:48
/* * Copyright (c) 2011, 烟台大学计算机学院* All rights reserved.* 作    者:王静* 完成日期:2013  年 4  月 24 日* 版 本 号:v1.0* 输入描述:* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。可以从第5周项目2的代码开始工作。* 程序输出:* 问题分析:* 算法设计:略*/#include<iostream>#include<cmath>using namespace std;class CFraction{private:int nume;  // 分子int deno;  // 分母public: CFraction(int nu=0,int de=1);    //置值,改变值时用 CFraction simplify();        //化简(使分子分母没有公因子) //比较运算符(二目)的重载 bool operator > (CFraction &t); bool operator < (CFraction &t); bool operator == (CFraction &t); //二目运算符的重载 CFraction operator+(CFraction &n); CFraction operator-(CFraction &n); CFraction operator*(CFraction &n); CFraction operator/(CFraction &n); void display();};CFraction::CFraction(int nu,int de)    //置值{    nume=nu;    deno=de;}CFraction CFraction::simplify() {    CFraction n; n.nume=nume;n.deno=deno; int i; if(nume%deno==0){  n.deno=1;  n.nume=nume/deno; }else{  if(nume>deno){   for(i=2;i<=n.deno;i++){    if(nume%i==0&&deno%i==0){     n.nume=n.nume/i;     n.deno=n.deno/i;    }   }  }else{   for(i=2;i<=n.nume;i++){                if(n.nume%i==0&&n.deno%i==0){                    n.nume=n.nume/i;                    n.deno=n.deno/i;                }   }  } }    return n;}bool CFraction::operator > (CFraction &t){ if(nume>t.nume||(nume==t.nume&&deno>t.deno)){  return true; }else{  return false; }}bool CFraction::operator < (CFraction &t){ if(nume<t.nume||(nume==t.nume&&deno<t.deno)){  return true; }else{  return false; }}bool CFraction::operator == (CFraction &t){ if(nume==t.nume&&deno==t.deno){  return true; }else{  return false; }}//二目运算符的重载CFraction CFraction::operator+(CFraction &n){ CFraction t; t.deno=deno*n.deno; t.nume=(n.nume)*deno+nume*(n.deno); return t.simplify();}CFraction CFraction::operator-(CFraction &n){ CFraction t; t.deno=deno*n.deno; t.nume=nume*n.deno-n.nume*deno; return t.simplify();}CFraction CFraction::operator*(CFraction &n){ CFraction t; t.deno=deno*n.deno; t.nume=nume*n.nume; return t.simplify();}CFraction CFraction::operator/(CFraction &n){ CFraction t; t.deno=deno*n.nume; t.nume=nume*n.deno; return t.simplify();}void CFraction::display(){ if(deno==1){  cout<<nume<<endl; }else{  cout<<nume<<"/"<<deno<<endl; }}int main(){    CFraction n1(3,2),n2(1,2),n;//构造函数,初始化用 cout<<"n1为:"; n1.display(); cout<<"n2为:"; n2.display(); cout<<"下面比较两个时间大小:\n"; if (n1>n2) cout<<"n1>n2"<<endl; if (n1<n2) cout<<"n1<n2"<<endl; if (n1==n2) cout<<"n1=n2"<<endl; cout<<endl; //下面自行设计对其他运算符的重载的测试 n=n1+n2; n.display(); n=n1-n2; n.display();        n=n1*n2; n.display(); n=n1/n2; n.display(); return 0;}


 

运行结果:
(贴图)


心得体会: