第八周 项目三(2)分数类中的运算符重载
2015-05-18 19:49
369 查看
问题及代码:
运行结果:
![](http://img.blog.csdn.net/20150518194839037?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29uZ2ppYW4xOTk2MDcyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
知识点总结:
在分数与整数混合运算过程中,不知道为什么在形参或实参之前加const会报错,不得已将const删除,还望老师解答
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:宋健 * 完成日期:2015年 5月 18日 * 版 本 号:v1.0 * * 问题描述:在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。 * 程序输入: * 程序输出: */ #include<iostream> #include<Cmath> #include<cstdlib> #include <iomanip> using namespace std; class CFraction { private: int nume; // 分子 int deno; // 分母 public: int gcd(int ,int); CFraction(int nu=0,int de=1); //构造函数,初始化用 void simplify(); //化简(使分子分母没有公因子) CFraction operator+(const CFraction &c); CFraction operator-(const CFraction &c); CFraction operator*(const CFraction &c); CFraction operator/(const CFraction &c); friend CFraction operator+( CFraction &c,int a); friend CFraction operator+(int a, CFraction &c); friend CFraction operator-( CFraction &c,int a); friend CFraction operator-(int a, CFraction &c); friend CFraction operator*( CFraction &c,int a); friend CFraction operator*(int a, CFraction &c); friend CFraction operator/( CFraction &c,int a); friend CFraction operator/(int a, 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 display(); }; CFraction::CFraction(int nu,int de) { if(de!=0) { nume=nu; deno=de; } else cout<<"分母不能为0!"; } void CFraction::simplify() { int m,n,r; m=fabs(deno); n=fabs(nume); while(r=m%n) // 求m,n的最大公约数 { m=n; n=r; } deno/=n; // 化简 nume/=n; if (deno<0) // 将分母转化为正数 { deno=-deno; nume=-nume; } } CFraction operator+( CFraction &c,int a) {CFraction c1(c.nume+a*c.deno,c.deno); c1.simplify(); return c1; } CFraction operator+(int a, CFraction &c) { CFraction b(a,1),z; z=c+b; return z; } CFraction operator-( CFraction &c,int a) { CFraction b(a,1); return c-b; } CFraction operator-(int a, CFraction &c) { CFraction b(a,1); return b-c; } CFraction operator*( CFraction &c,int a) { CFraction b(a,1); return c*b; } CFraction operator*(int a, CFraction &c) { CFraction b(a,1); return c*b; } CFraction operator/( CFraction &c,int a) { CFraction b(a,1); return c/b; } CFraction operator/(int a, CFraction &c) { CFraction b(a,1); return b/c; } CFraction CFraction::CFraction::operator+(const CFraction &c) { CFraction x(nume*c.deno+deno*c.nume,deno*c.deno); x.simplify(); return x; } CFraction CFraction::operator-(const CFraction &c) { CFraction x(nume*c.deno-deno*c.nume,deno*c.deno); x.simplify(); return x; } CFraction CFraction::operator*(const CFraction &c) { CFraction x(nume*c.nume,deno*c.deno); x.simplify(); return x; } CFraction CFraction::operator/(const CFraction &c) { CFraction x(nume*c.deno,deno*c.nume); x.simplify(); return x; } bool CFraction::operator>(const CFraction &c) { if(nume*c.deno>deno*c.nume) return true; else return false; } bool CFraction::operator<(const CFraction &c) { if(nume*c.deno<deno*c.nume) return true; else return false; } bool CFraction::operator==(const CFraction &c) { if(*this>c||*this<c) return false; else return true; } bool CFraction::operator!=(const CFraction &c) { if (*this==c) return false; else return true; } bool CFraction::operator>=(const CFraction &c) { if(*this<c) return false; else return true; } bool CFraction::operator<=(const CFraction &c) { if(*this>c) return false; else return true; } 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; CFraction c1(5,3),c2; c2=c1+5; c2.display(); c2=5+c1; c2.display(); c2=c1-5; c2.display(); c2=5-c1; c2.display(); c2=c1*5; c2.display(); c2=5*c1; c2.display(); c2=c1/5; c2.display(); c2=5/c1; c2.display(); return 0; }
运行结果:
知识点总结:
在分数与整数混合运算过程中,不知道为什么在形参或实参之前加const会报错,不得已将const删除,还望老师解答
相关文章推荐
- 第八周项目三 分数类中的运算符重载-(1)分数的加减乘除
- 第八周项目三----分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周项目3-1:分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周上机项目3 分数类中的运算符重载
- 第八周项目 3 分数类中的运算符重载(续)
- 第八周【项目3-分数类中的运算符重载】
- 第八周上机实践项目3——分数类中的运算符重载(2)
- 第八周项目三——分数类中的运算符重载(2)
- 第八周 项目3-分数类中的运算符重载(1)加减乘除和6种比较关系
- 第八周 项目三(1) 分数类中的运算符重载
- 第八周【项目3-分数类中的运算符重载】
- 第八周上机任务项目3-分数类中运算符重载
- 第八周项目三(1)(2)分数类的运算符重载(加减乘除分数以及整数)附加输出流。
- 15第八周项目三——分数类中的运算符重载(2)
- 第八周项目三分数类中的运算符重载(2)
- 第八周(项目三1)——分数类中的运算符重载.
- 第八周 课后实践:项目三——分数类中的运算符重载(1)
- 第八周 项目三(1):分数类中的运算符重载