第八周【项目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等各种运算。
![](http://img.blog.csdn.net/20150426081117363?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3poZW5ncXU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个项目很能锻炼人的调试能力,也略懂一点程序维护的做法
[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; }
这个项目很能锻炼人的调试能力,也略懂一点程序维护的做法
相关文章推荐
- 第八周上机实践项目3-分数类中的运算符重载(分数与分数、分数与整数)
- 第八周项目三 分数类中的运算符重载1
- 2015年第八周项目三:分数类中的运算符重载(1)
- 第八周项目三(1):分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载 (2)
- 第八周——运算符重载——项目三(2)分数类
- 第八周项目三——分数类中的运算符重载
- 第八周 项目3 分数类中的运算符重载
- 第八周项目三--分数类中的运算符重载(2)
- 第八周项目三分数类中的运算符重载(1)
- 第八周项目三 分数类中的运算符重载 2
- 第八周项目三-分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周上机实践项目3——分数类的运算符重载(1)
- 第八周项目三——分数类中的运算符重载(1)
- 第八周 【项目3-分数类中的运算符重载】(2)
- 第八周 项目3-分数类中的运算符重载(2)
- 第八周项目3-分数类中的运算符重载
- 第八周项目3 分数类中的运算符重载
- 2015年第八周项目三:分数类中的运算符重载(2)