/*
* Copyright (c) 2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名称:main.cpp
* 作 者:胡庆龙
* 完成日期:2016年5月31日
* 版 本 号:v1.0
*
* 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
//构造函数及运算符重载的函数声明
CFraction(int n=0,int d=0):nume(n),deno(d){};
CFraction operator+(const CFraction &c);
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);
friend ostream &operator<<(ostream &out,CFraction c);
};
CFraction CFraction::operator+(const CFraction &c)
{
CFraction t;
int y,m,n;
m=t.nume=nume*c.deno+c.nume*deno;
n=t.deno=deno*c.deno;
n=t.nume%t.deno;
while(y)
{
y=n%m;
n=m;
m=y;
}
t.nume=t.nume/n;
t.deno=t.deno/n;
return t;
}
CFraction CFraction::operator-(const CFraction &c)
{
CFraction t;
int y,m,n;
m=t.nume=nume*c.deno-c.nume*deno;
n=t.deno=deno*c.deno;
while(y)
{
y=n%m;
n=m;
m=y;
}
t.nume=t.nume/n;
t.deno=t.deno/n;
return t;
}
CFraction CFraction::operator*(const CFraction &c)
{
CFraction t;
int y,m,n;
m=t.nume=nume*c.nume;
n=t.deno=deno*c.deno;
while(y)
{
y=n%m;
n=m;
m=y;
}
t.nume=t.nume/n;
t.deno=t.deno/n;
return t;
}
CFraction CFraction::operator/(const CFraction &c)
{
CFraction t;
int y,m,n;
m=t.nume=nume*c.deno;
n=t.deno=deno*c.nume;
while(y)
{
y=n%m;
n=m;
m=y;
}
t.nume=t.nume/n;
t.deno=t.deno/n;
return t;
}
bool CFraction::operator>(const CFraction &c)
{
double a,b;
a=(double)nume/deno;
b=(double)c.nume/deno;
if(a>b)
return true;
else
return false;
}
bool CFraction::operator<(const CFraction &c)
{
double a,b;
a=(double)nume/deno;
b=(double)c.nume/deno;
if(a<b)
return true;
else
return false;
}
bool CFraction::operator>=(const CFraction &c)
{
double a,b;
a=(double)nume/deno;
b=(double)c.nume/deno;
if(a>=b)
return true;
else
return false;
}
bool CFraction::operator<=(const CFraction &c)
{
double a,b;
a=(double)nume/deno;
b=(double)c.nume/deno;
if(a<=b)
return true;
else
return false;
}
bool CFraction::operator!=(const CFraction &c)
{
double a,b;
a=(double)nume/deno;
b=(double)c.nume/deno;
if(a!=b)
return true;
else
return false;
}
bool CFraction::operator==(const CFraction &c)
{
double a,b;
a=(double)nume/deno;
b=(double)c.nume/deno;
if(a==b)
return true;
else
return false;
}
ostream &operator<<(ostream &out,CFraction c)
{
if(c.deno==1)
out<<c.nume;
else
out<<c.nume<<"/"<<c.deno;
return out;
}
//重载函数的实现及用于测试的main()函数
int main()
{
CFraction a(5,6),b(2,3);
cout<<a+b<<endl;
cout<<a-b<<endl;
cout<<a*b<<endl;
cout<<a/b<<endl;
CFraction m(3,2),n(6,4);
cout<<"m="<<m<<" n="<<n<<" a="<<a<<" b="<<b<<endl;
if(m>b)
cout<<"m>b"<<endl;
if(b<a)
cout<<"b<a"<<endl;
if(m>=b)
cout<<"m>=b"<<endl;
if(b<=a)
cout<<"b<=a"<<endl;
if(m==n)
cout<<"m==n"<<endl;
if(n!=a)
cout<<"n!=a"<<endl;
return 0;
}