项目3"/>
/项目3
/*
* 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;
}
运行结果:
(贴图)
心得体会:
更多推荐
/项目3
发布评论