您的位置:首页 > 其它

第八周【项目3-分数类中的运算符重载】

2015-04-26 08:11 483 查看
(1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。可以在第4周分数类代码的基础上开始工作。

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

class CFraction

{

private:

int nume; // 分子

int deno; // 分母

public:

//构造函数及运算符重载的函数声明

};

//重载函数的实现及用于测试的main()函数

  (2)在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a,45+a, a*27, 5/a等各种运算。

#include<iostream>
using namespace std;
class CFraction
{
private:
int nume;  // 分子
int deno;  // 分母
public:
//构造函数及运算符重载的函数声明
CFraction(int m=1,int d=1):nume(m),deno(d) {};
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);
CFraction operator +(int n);
CFraction operator -(int n);
CFraction operator /(int n);
CFraction operator *(int n);
bool operator<(int n);
bool operator>(int n);
bool operator<=(int n);
bool operator>=(int n);
bool operator!=(int n);
bool operator ==(int n);
friend CFraction operator +(int n,const CFraction &c);
friend CFraction operator -(int n,const CFraction &c);
friend CFraction operator *(int n,const CFraction &c);
friend CFraction operator /(int n,const CFraction &c);
friend bool operator<(int n,const CFraction&c);
friend bool operator>(int n,const CFraction&c);
friend bool operator>=(int n,const CFraction&c);
friend bool operator<=(int n,const CFraction&c);
friend bool operator!=(int n,const CFraction &c);
friend bool operator==(int n,const CFraction&c);
CFraction  operator-();
CFraction  operator+();
void simplify();
void display();
};
CFraction CFraction::operator+()
{
nume=nume;
return *this;
}
CFraction CFraction::operator-()
{
nume=-nume;
return *this;
}
bool operator==(int n,const CFraction&c)
{
if(n*c.deno==c.nume)return true;
else return false;
}
bool operator!=(int n,const CFraction&c)
{
if(n*c.deno!=c.nume)return true;
else return false;
}
bool operator<=(int n,const CFraction&c)
{
if(n*c.deno==c.nume)return true;
else if(n<c)return true;
else return false;
}
bool operator>=(int n,const CFraction&c)
{
if(n*c.deno==c.nume)return true;
else if(n>c)return true;
else return false;
}
bool operator>(int n,const CFraction&c)
{
if(n*c.deno>c.nume)return true;
else return false;
}
bool operator<(int n,const CFraction&c)
{
if(n*c.deno<c.nume)
return true;
else return false;
}
CFraction operator /(int n,const CFraction &c)
{
CFraction a;
a.nume=c.nume;
a.deno*=c.deno;
a.simplify();
return a;
}
CFraction operator *(int n,const CFraction &c)
{
CFraction a;
a.nume*=c.nume;
a.deno=c.deno;
a.simplify();
return a;
}
CFraction operator -(int n,const CFraction &c)
{
CFraction a;
a.nume=n*c.deno-c.nume;
a.deno=c.deno;
a.simplify();
return a;
}
CFraction operator +(int n,const CFraction &c)
{
CFraction a;
a.nume=n*c.deno+c.nume;
a.deno=c.deno;
a.simplify();
return a;
}
bool CFraction::operator==(int n)
{
if(nume==n*deno)return true;
else return false;
}
bool CFraction::operator!=(int n)
{
if(nume!=deno*n)return true;
else return false;
}
bool CFraction::operator<=(int n)
{
if(nume==deno*n)return true;
else if(nume<n*deno)return true;
else return false;
}
bool CFraction::operator>=(int n)
{
if(nume==deno*n)return true;
else if(nume>n*deno)return true;
else return false;
}
bool CFraction::operator>(int n)
{
if(nume>n*deno)return true;
else return false;
}
bool CFraction::operator<(int n)
{
if(nume<n*deno)return true;
else return false;
}
CFraction CFraction::operator /(int n)
{
deno*=n;
simplify();
return (*this);
}
CFraction CFraction::operator *(int n)
{
nume*=n;
return (*this);
}
CFraction CFraction::operator -(int n)
{
nume-=n*deno;
simplify();
return (*this);
}
CFraction CFraction::operator +(int n)
{
nume+=deno*n;
return (*this);
}
bool CFraction::operator==(const CFraction &c)
{
if((deno==c.deno)&&(nume==c.nume))
return true;
else return false;
}
bool CFraction::operator!=(const CFraction &c)
{
if(nume*c.deno!=c.nume*deno)return true;
else return false;
}
bool CFraction::operator>=(const CFraction &c)
{
if(deno==c.deno&&nume==c.nume)
return true;
else if((*this)>c)return true;
else return false;
}
bool CFraction::operator<=(const CFraction &c)
{
if(deno==c.deno&&nume==c.nume)
return true;
else if((*this)<c)return true;
else return false;
}
bool CFraction::operator>(const CFraction &c)
{
if((deno==c.deno)&&(nume>c.nume))
return true;
else if(nume*c.deno>c.nume*deno)
return true;
else return false;

}
bool CFraction::operator<(const CFraction &c)
{
if((deno==c.deno)&&(nume<c.nume))
return true;
else if(nume*c.deno<c.nume*deno)
return true;
else return false;
}
CFraction CFraction::operator/(const CFraction &c)
{
deno*=c.nume;
nume*=c.deno;
simplify();
return(*this);
}
CFraction CFraction::operator*(const CFraction &c)
{
deno*=c.deno;
nume*=c.nume;
simplify();
return(*this);
}
CFraction CFraction::operator+(const CFraction &c)
{
if(deno==c.deno)
nume+=c.nume;
else
{
deno=deno*c.deno;
nume=c.deno*nume+deno*c.nume;
}
simplify();
return(*this);
}
CFraction CFraction::operator-(const CFraction &c)
{
if(deno==c.deno)
nume-=c.nume;
else
{
deno=deno*c.deno;
nume=c.deno*nume-deno*c.nume;
}
simplify();
return(*this);
}
void CFraction::simplify() //化简(使分子分母没有公因子)
{
int a=nume,d=deno,c,x;
if(a<d)
{
x=a;
a=d;
d=x;
}
while((c=a%d)!=0)
{
a=d;
d=c;
}
nume/=d;
deno/=d;
}
void CFraction::display()
{
cout<<nume<<"/"<<deno<<endl;
}
int main()
{
CFraction x(1,3),y(-5,10),s;
cout<<"分数x=1/3      y=-5/10"<<endl;
s=x+y;
cout<<"+x+y=";
s.display();
s=+x-y;
cout<<"x-y=";
s.display();
s=x*y;
cout<<"x*y=";
s.display();
s=x/y;
cout<<"x/y=";
s.display();
s=-x+y;
cout<<"-x+y=";
s.display();
x.display();
if (x>y) cout<<"大于"<<endl;
if (x<y) cout<<"小于"<<endl;
if (x==y) cout<<"等于"<<endl;
y.display();
cout<<endl;
}




这个项目很能锻炼人的调试能力,也略懂一点程序维护的做法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: