您的位置:首页 > 其它

15第八周项目三——分数类中的运算符重载(1)

2015-04-29 09:03 537 查看
/*

* 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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: