第八周 项目3-分数类中的运算符重载(1)
2015-04-29 19:36
316 查看
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:呼亚萍 * 完成日期:2015年4月25日 * 版 本 号:v1.0 * * 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。 * 程序输入:相应的程序 * 程序输出:对应得结果 */ <p>#include <iostream> #include <cstdlib> using namespace std;</p><p>class CFraction { public: CFraction(int nu=0,int de=1); CFraction operator+(const CFraction &c); void simplify(); 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 display(); private: int nume;//分子 int deno;//分母 }; CFraction::CFraction(int nu,int de) { if(de==0) { cout<<"初始化失败,分子不能为0"; exit(0); } else { nume=nu; deno=de; } } void CFraction::simplify() { int a=nume,b=deno,c; while(b!=0) { c=a%b; a=b; b=c; } nume=nume/a; deno=deno/a; if((deno<0)&&(nume<0)) { deno*=(-1); nume*=(-1); } if((deno<0)&&(nume>0)) { deno*=(-1); nume*=(-1); } } CFraction CFraction::operator+(const CFraction &c) { CFraction m; m.deno=deno*c.deno; m.nume=nume*c.deno+c.nume*deno; m.simplify(); return m; } CFraction CFraction::operator-(const CFraction &c) { CFraction m; m.deno=deno*c.deno; m.nume=nume*c.deno-c.nume*deno; m.simplify(); return m; } CFraction CFraction::operator*(const CFraction &c) { CFraction m; m.nume=nume*c.nume; m.deno=deno*c.deno; m.simplify(); return m;</p><p>} CFraction CFraction::operator/(const CFraction &c) { CFraction m; if(!c.nume)return *this; m.nume=nume*c.deno; m.deno=deno*c.nume; m.simplify(); return m; } bool CFraction::operator>(const CFraction &c) { int this_nume,c_nume,common_deno; this_nume=nume*c.deno; // 计算分数通分后的分子,同分母为deno*c.deno c_nume=c.nume*deno; common_deno=deno*c.deno; if ((this_nume>c_nume&&common_deno>0)||(this_nume<c_nume&&common_deno<0)) return true; // 将通分后的分子比较大小 return false;</p><p>} bool CFraction::operator<(const CFraction &c) { int this_nume,c_nume,common_deno; this_nume=nume*c.deno; c_nume=c.nume*deno; common_deno=deno*c.deno; if ((this_nume-c_nume)*common_deno<0) return true; return false;</p><p>} 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||*this<c) return false; else return true; } bool CFraction::operator!=(const CFraction &c) { if(*this==c) return false; else return true; }</p><p>void CFraction::display() { if(nume==deno) cout<<"1"<<endl; else cout<<"("<<nume<<"/"<<deno<<")"<<endl; } int main() { CFraction c1(1,3),c2(-5,10),s; cout<<"c1=1/3"<<'\t'<<"c2=-5/10"<<endl; s=c1+c2; cout<<"c1+c2="; s.display(); s=c1-c2; cout<<"c1-c2="; s.display(); s=c1*c2; cout<<"c1*c2="; s.display(); s=c1/c2; cout<<"c1/c2="; s.display(); 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;</p><p> return 0; } </p>
运算结果:
知识点总结:
分数的相加与比较,运算符重载,分数的通分化简。
学习心得:
同一个问题有不同的解决方法,在编写时需要有严密的思考。
相关文章推荐
- 2015年第八周项目三:分数类中的运算符重载(1)
- 第八周项目三(1):分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载 (2)
- 第八周上机实践项目3-分数类中的运算符重载(分数与分数、分数与整数)
- 第八周——运算符重载——项目三(2)分数类
- 第八周项目三——分数类中的运算符重载
- 第八周 项目3 分数类中的运算符重载
- 第八周项目三 分数类中的运算符重载1
- 第八周项目三-分数类中的运算符重载
- 第八周项目3-分数类中的运算符重载
- 第八周项目三--分数类中的运算符重载(2)
- 第八周项目三分数类中的运算符重载(1)
- 第八周项目三 分数类中的运算符重载 2
- 2015年第八周项目三:分数类中的运算符重载(2)
- 第八周项目三——分数类中的运算符重载(2)
- 第八周上机实践项目3——分数类的运算符重载(1)
- 第八周项目三——分数类中的运算符重载(1)
- 第八周 【项目3-分数类中的运算符重载】(2)
- 第八周 项目3-分数类中的运算符重载(2)
- 第八周项目3-分数类中的运算符重载