第十三周项目三 分数类中的运算符重载 (3)
来源:互联网 发布:思途cms源码 编辑:程序博客网 时间:2024/06/04 18:57
/*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:舒文超 * 完成日期:2016年5月22日 * 版本号:vc++6.0 * 问题描述:定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。 */#include<iostream>#include<cmath>using namespace std;class CFraction{private: int nume; // 分子 int deno; // 分母public: //构造函数及运算符重载的函数声明CFraction(int nu=1,int de=1):nume(nu),deno(de) {} void simplify();void display(); CFraction operator+(const CFraction &c); //两个分数相加,结果要化简 CFraction operator-(const CFraction &c); //两个分数相减,结果要化简 CFraction operator*(const CFraction &c); //两个分数相乘,结果要化简 CFraction operator/(const CFraction &c); //两个分数相除,结果要化简CFraction operator+(int a); //分数加整数,结果要化简 CFraction operator-(int a); //分数减整数,结果要化简 CFraction operator*(int a); //分数乘整数,结果要化简 CFraction operator/(int a); //分数除整数,结果要化简 CFraction operator+(); //取正一目运算 CFraction operator-(); //取反一目运算 CFraction operator~(); //取倒数一目运算 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 m,n,r; n=fabs(deno); m=fabs(nume); while(r=m%n) { m=n; n=r; } deno/=n; nume/=n; if (deno<0) { deno=-deno; nume=-nume; }}void CFraction::display(){cout<<nume<<"/"<<deno<<endl;}CFraction CFraction::operator+(const CFraction &c){ CFraction t; t.nume=nume*c.deno+c.nume*deno; t.deno=deno*c.deno; t.simplify(); return t;}CFraction CFraction::operator-(const CFraction &c) //两个分数相减,结果要化简{ CFraction c1; c1.nume=nume*c.deno-c.nume*deno; c1.deno=deno*c.deno; c1.simplify(); return c1;}CFraction CFraction::operator*(const CFraction &c) //两个分数相乘,结果要化简{CFraction c1; c1.nume=nume*c.nume; c1.deno=deno*c.deno; c1.simplify(); return c1;}CFraction CFraction::operator/(const CFraction &c) {CFraction c1; c1.nume=nume*c.deno; c1.deno=deno*c.nume; c1.simplify(); return c1;}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;}bool CFraction::operator<(const CFraction &c){int nume1,nume2,deno1; nume1=nume*c.deno; nume2=c.nume*deno; deno1=deno*c.deno; if ((nume1-nume2)*deno1<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) 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;}CFraction CFraction::operator+(int a){CFraction C;int c;c=a*deno;C.deno=deno; C.nume=nume+c; C.simplify(); return C;}CFraction CFraction::operator-(int a){CFraction C;int c;c=a*deno;C.deno=deno; C.nume=nume-c; C.simplify(); return C;}CFraction CFraction::operator*(int a){CFraction C;C.deno=deno; C.nume=nume*a; C.simplify(); return C;}CFraction CFraction::operator/(int a){CFraction C;C.deno=deno*a; C.nume=nume; C.simplify(); return C;}CFraction CFraction::operator+() //取正一目运算{return *this;}CFraction CFraction::operator-() //取反一目运算{CFraction C; C.nume=-nume; C.deno=deno; return C;}CFraction CFraction::operator~(){CFraction C; C.nume=deno; C.deno=nume; //未对原分子为0的情况进行处理 if(C.deno<0) //保证负分数的负号在分子上 { C.deno=-C.deno; C.nume=-C.nume; } return C;}//重载函数的实现及用于测试的main()函数int main(){char c;int a,b,d; cout<<"输入第一个分数(样例:x/y): "; cin>>a>>c>>b;CFraction x(a,b); cout<<"输入第二个分数(样例:x/y): ";cin>>a>>c>>b;CFraction y(a,b);CFraction s;cout<<"第一个分数为:"<<endl;x.display();cout<<"第二个分数为:"<<endl;y.display();cout<<"请输入要进行运算的整数d"<<endl;cin>>d;s=x+d;cout<<"x+d=";s.display();cout<<endl;s=x-d;cout<<"x-d=";s.display();cout<<endl;s=x*d;cout<<"x*d=";s.display();cout<<endl;s=x/d;cout<<"x/d=";s.display();cout<<endl; s=x+y; cout<<"x+y=";s.display();cout<<endl; s=x-y; cout<<"x-y=";s.display();cout<<endl; s=x*y; cout<<"x*y=";s.display();cout<<endl; s=x/y; cout<<"x/y=";s.display();cout<<endl; if(x>y) cout<<"大于"<<endl; if(x<y) cout<<"小于"<<endl; if(x==y) cout<<"等于"<<endl;cout<<"-x=";s=-x;s.display();cout<<endl; cout<<"+x=";s=+x;cout<<endl; cout<<"x的倒数: ";s=~x;cout<<endl; return 0;}
0 0
- 第十三周项目三 分数类中的运算符重载 (3)
- 第十三周项目三 分数类中的运算符重载 (1)
- 第十三周项目三 分数类中的运算符重载 (2)
- 第十三周项目三 分数类中的运算符重载 (4)
- 第十三周项目-项目1-(3)分数类中的运算符重载
- 第十三周项目 1分数类中的运算符重载
- 第十三周项目58-分数类中的运算符重载
- 第十三周项目一-分数类中的运算符重载
- 第十三周【项目 1分数类中的运算符重载】
- 第十三周项目一-分数类中的运算符重载
- 第十三周项目:分数类中的运算符重载
- 第十三周项目1-分数类中的运算符重载(3)
- 第十三周项目-项目1-(2)-分数类中的运算符重载
- 第十三周项目二:分数类中的运算符重载(3)
- 第十三周上机实践项目1(3):分数中的运算符重载
- 第十三周项目1-分数类中的运算符重载(1)
- 第十三周项目1-分数类中的运算符重载(改进)
- 第十三周项目1-分数类中的运算符重载(1)
- 123
- socketClient
- next_day函数用法
- 高效Redis Client多线程操作的并发吞吐设计
- maven基础教程(二)
- 第十三周项目三 分数类中的运算符重载 (3)
- Ruby hello world
- 349. Intersection of Two Arrays
- Unity3D-基础小知识(一)
- 记一场涨分的Bstar
- Unity3D-基础小知识(二)
- junit测试环境搭建(遇到的坑)
- Java实现HTTP多线程下载功能app
- android:descendantFocusability用法简析