第八周 项目三:分数类中的运算符重载
来源:互联网 发布:互联网程序员 编辑:程序博客网 时间:2024/05/24 05:23
/** 程序的版权和版本声明部分* Copyright (c)2013, 烟台大学计算机学院学生* All rightsreserved.* 作 者: 李 洋* 完成日期: 2013 年 4 月 20 日* 版本号: v1.0* 输入描述:* 问题描述:* 输出:*/#include<iostream>using namespace std;int gcd(int m, int n);class CFraction{private: int nume; // 分子 int deno; // 分母public:CFraction(int nu=0,int de=1); //构造函数,初始化用void set(int nu=0,int de=1); //置值,改变值时用void simplify();void display();CFraction operator+(CFraction &c);CFraction operator-(CFraction &c);CFraction operator*(CFraction &c);CFraction operator/(CFraction &c);CFraction operator-(); //求反bool operator>(CFraction &c);bool operator<(CFraction &c);bool operator==(CFraction &c);};CFraction::CFraction(int nu,int de){ nume=nu; deno=de;}void CFraction::set(int nu,int de){ nume=nu; deno=de;}void CFraction::simplify(){int m=gcd(nume,deno);deno/=m;nume/=m;}void CFraction::display(){ cout<<nume<<"/"<<deno<<endl;}// 求m,n的最大公约数int gcd(int m, int n){int min;if(m<n){ for(min=m;min>0;--min) { if(m%min==0&&n%min==0) return min; }}else{ for(min=n;min>0;--min) { if(m%min==0&&n%min==0) return min; }}}CFraction CFraction::operator+(CFraction &c){ return CFraction(nume*c.deno+deno*c.nume,deno*c.deno);}CFraction CFraction::operator-(CFraction &c){ return CFraction(nume*c.deno-deno*c.nume,deno*c.deno);}CFraction CFraction::operator*(CFraction &c){ return CFraction(nume*c.nume,deno*c.deno);}CFraction CFraction::operator/(CFraction &c){ return CFraction(nume*c.deno,deno*c.nume);}CFraction CFraction::operator-(){ return CFraction(deno,nume);}bool CFraction::operator>(CFraction &c){ if(nume*c.deno>deno*c.nume)return true; elsereturn false;}bool CFraction::operator<(CFraction &c){ if(nume*c.deno<deno*c.nume)return true; elsereturn false;}bool CFraction::operator==(CFraction &c){ if(nume*c.deno==deno*c.nume)return true; elsereturn false;}int main(){ CFraction c1(1,2),c2(2,3),c3; cout<<"c1= "; c1.display(); c1.simplify(); cout<<"c2= "; c2.display(); c2.simplify(); c3=c1+c2; c3.simplify(); cout<<"c1+c2= "; c3.display(); c3=c1-c2; cout<<"c1-c2= "; c3.display(); c3=c1*c2; c3.simplify(); cout<<"c1*c2= "; c3.display(); c3=c1/c2; c3.simplify(); cout<<"c1/c2= "; c3.display(); c3=-c1; cout<<"c1求反为:"; c3.display(); cout<<"下面比较两个分数大小:\n";if(c1>c2) cout<<"c1>c2"<<endl;if(c1<c2) cout<<"c1<c2"<<endl;if(c1==c2) cout<<"c1=c2"<<endl;return 0;}