/*
*程序的版权和版本声明部分:
*Copyright(c)2014,烟台大学计算机学院学生
*All rights reserved.
*文件名称:
*作者:刘晓晓
*完成日期:2014年 04月21号
*版本号:v1.0
*对任务及求解方法的描述部分:
*输入描述: 无
*问题描述:
*程序输出:无
*问题分析:
*算法设计:
*/
#include <iostream>
using namespace std;
int gcd(int n,int m);
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction (int a=0,int b=0)
{
nume=a;
deno=b;
}
CFraction operator+(CFraction &c);
CFraction operator-(CFraction &c);
CFraction operator*(CFraction &c);
CFraction operator/(CFraction &c);
bool operator>(CFraction &c);
bool operator<(CFraction &c);
bool operator >=(CFraction &c);
bool operator<=(CFraction &c);
bool operator ==(CFraction &c);
CFraction operator-();
CFraction operator+();
void simplay();
void display();
friend ostream&operator<<(ostream&,CFraction&);
friend istream&operator >>(istream&,CFraction&);
};
CFraction CFraction::operator+(CFraction &c)
{
CFraction t;
t.nume=nume*c.deno+deno*c.nume;
t.deno=deno*c.deno;
return t;
}
CFraction CFraction::operator-(CFraction &c)
{
CFraction t;
t.nume=nume*c.deno-deno*c.nume;
t.deno=deno*c.deno;
return t;
}
CFraction CFraction::operator*(CFraction &c)
{
CFraction t;
t.nume=nume*c.nume;
t.deno=deno*c.deno;
return t;
}
CFraction CFraction::operator/(CFraction &c)
{
CFraction t;
t.nume=nume*c.deno;
t.deno=deno*c.nume;
return t;
}
bool CFraction ::operator >(CFraction &c)
{
if (nume*c.deno>deno*c.nume)
return true;
return false ;
}
bool CFraction ::operator <(CFraction &c)
{
if (nume*c.deno<deno*c.nume)
return true;
return false ;
}
bool CFraction ::operator >=(CFraction &c)
{
if (!(nume*c.deno<deno*c.nume))
return true;
return false ;
}
bool CFraction ::operator <=(CFraction &c)
{
if (!(nume*c.deno>deno*c.nume))
return true;
return false ;
}
bool CFraction ::operator ==(CFraction &c)
{
if (nume==c.nume&&deno==c.deno)
return true;
return false ;
}
void CFraction::display()
{
cout<< nume<<"/"<<deno<<endl;
}
void CFraction::simplay()
{
int n=gcd(deno, nume);
deno/=n; // 化简
nume/=n;
}
// 求m,n的最大公约数
int gcd(int m, int n) //这个函数可以定义为类的成员函数,也可以为一般函数
{
int r;
if (m<n)
{
r=m;
m=n;
n=r;
}
while(r=m%n) // 求m,n的最大公约数
{
m=n;
n=r;
}
return n;
}
istream&operator >>(istream&input,CFraction&c)
{
char sign;
input>> c.nume>>sign>>c.deno;
return input;
}
ostream&operator <<(ostream&output,CFraction&c)
{
output<<c.nume<<"/"<<c.deno<<endl;
return output;
}
int main()
{
CFraction t1(2,9),t2(4,16),t3;
cout<<"t1=";
t1.display();
cout<<"化简后t1=";
t1.simplay();
t1.display();
cout<<"t2=";
t2.display();
cout<<"化简后t2=";
t2.simplay();
t2.display();
cout<<"比较两个数的大小:"<<endl;
if (t1>t2)cout<<"t1>t2"<<endl;
if (t1<=t2)cout<<"t1<=t2"<<endl;
if (t1<t2)cout<<"t1<t2"<<endl;
if (t1==t2)cout<<"t1=t2"<<endl;
t3=t1+t2;
t3.simplay();
cout<<"t1+t2=";
t3.display();
t3=t2-t1;
t3.simplay();
cout<<"t2-t1=";
t3.display();
t3=t2*t1;
cout<<"t1*t2=";
t3.simplay();
t3.display();
t3=t1/t2;
cout<<"t1/t2=";
t3.simplay();
t3.display();
cout<<"取-,分子分母交换位置"<<endl;
t1=-t1;
t1.display();
cout<<"取+"<<endl;
t1=+t1;
t1.display();
return 0;
}
CFraction CFraction ::operator-()
{
CFraction c;
c.deno=nume;
c.nume=deno;
return c;
}
CFraction CFraction ::operator+()
{
CFraction c;
c.deno=deno;
c.nume=nume;
return c;
}