您的位置:首页 > 其它

八周 项目3 分数类中的运算符重载

2014-04-17 13:36 260 查看
/*
* 程序的版权和版本声明部分:
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作    者:赵加响
* 完成日期:2014年 4月 17日
* 程序输出:
* 问题分析:略
* 算法设计:略
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume;  // 分子
int deno;  // 分母
public:
//构造函数及运算符重载的函数声明
CFraction(int nu=0,int de=1);
void setTime(int nu,int de);
void display();
void simplify();
bool operator < (CFraction &c);
bool operator > (CFraction &c);
bool operator <= (CFraction &c);
bool operator >= (CFraction &c);
bool operator == (CFraction &c);
bool operator != (CFraction &c);
CFraction operator + (CFraction &c);
CFraction operator - (CFraction &c);
CFraction operator * (CFraction &c);
CFraction operator / (CFraction &c);
};
//重载函数的实现及用于测试的main()函数
CFraction::CFraction(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction::display()
{
cout<<nume<<"/"<<deno<<endl;
}
void CFraction::simplify()
{
int d,n,r;
d=deno;
n=nume;
while(r=d%n)
{
d=n;
n=r;
}
deno/=n;
nume/=n;
if(deno<0)
{
deno=-deno;
nume=-nume; //借鉴贺老师的
}
}
bool CFraction::operator < (CFraction &c)
{
while(deno==c.deno)
{
if(nume<c.nume)
return true;
else
return false;
}
while(deno!=c.deno)
{
if(nume*c.deno<deno*c.nume)
return true;
else
return false;
}
}
bool CFraction::operator > (CFraction &c)
{
while(deno==c.deno)
{
if(nume>c.nume)
return true;
else
return false;
}
while(deno!=c.deno)
{
if(nume*c.deno>deno*c.nume)
return true;
else
return false;
}
}
bool CFraction::operator <= (CFraction &c)
{
if(*this>c)return false;
return true;
}
bool CFraction::operator >= (CFraction &c)
{
if(*this<c)return false;
return true;
}
bool CFraction::operator == (CFraction &c)
{
if(*this<=c&&*this>=c)return true;
return false;
}
bool CFraction::operator != (CFraction &c)
{
if(*this==c)return false;
return true;
}
CFraction CFraction::operator + (CFraction &c)
{
int de,nu;
if(deno==c.deno)
{
nu=nume+c.nume;
de=deno;
}
else
nu=nume*c.deno+deno*c.nume;
de=deno*c.deno;
CFraction c0(nu,de);
c0.simplify();
return c0;
}
CFraction CFraction::operator - (CFraction &c)
{
int de,nu;
if(deno==c.deno)
{
nu=nume-c.nume;
de=deno;
}
else
nu=nume*c.deno-deno*c.nume;
de=deno*c.deno;
CFraction c0(nu,de);
c0.simplify();
return c0;
}
CFraction CFraction::operator * (CFraction &c)
{
int de,nu;
de=deno*c.deno;
nu=nume*c.nume;
CFraction c0(nu,de);
c0.simplify();
return c0;
}
CFraction CFraction::operator / (CFraction &c)
{
int de,nu;
de=deno*c.nume;
nu=nume*c.deno;
CFraction c0(nu,de);
c0.simplify();
return c0;
}
int main()
{
CFraction c1(3,8),c2(3,7),c3,c4,c5,c6;
cout<<"c1=";
c1.display();
cout<<"c2=";
c2.display();
cout<<"c1,c2关系为:"<<endl;;
if(c1<c2)cout<<"c1<c2"<<endl;
if(c1>c2)cout<<"c1>c2"<<endl;
if (c1==c2) cout<<"c1=c2"<<endl;
if (c1!=c2) cout<<"c1≠c2"<<endl;
if (c1>=c2) cout<<"c1≥c2"<<endl;
if (c1<=c2) cout<<"c1≤c2"<<endl;
cout<<endl;
c3=c1+c2;
cout<<"c1+c2=";
c3.display();
c4=c1-c2;
cout<<"c1-c2=";
c4.display();
c5=c1*c2;
cout<<"c1*c2=";
c5.display();
c6=c1/c2;
cout<<"c1/c2=";
c6.display();
}




感悟:终于靠自己的力量做出来了,尽管其中有老师的提示,但在这一篇中博文中,我流了很多汗水,和项目2不同的是,只有个别的几句是借鉴的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: