/*
* 程序的版权和版本声明部分
* Copyright (c)2013, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 作者:赵晓晨
* 完成日期: 2013年04月20日
* 版本号: v1.0
* 输入描述:无
* 问题描述:无
* 程序输出:无
*/
#include<iostream>
using namespace std;
class CFraction
{
private:
int nume;
int deno;
public:
CFraction(int n=1,int d=1):nume(n),deno(d){};
CFraction operator+(CFraction &c);
CFraction operator-(CFraction &c);
CFraction operator*(CFraction &c);
CFraction operator/(CFraction &c);
//分数中的类可以和整数进行四则运算
CFraction operator+(int i);
CFraction operator-(int i);
CFraction operator*(int i);
CFraction operator/(int i);
CFraction operator-();
bool operator>(CFraction &c);
CFraction simply(CFraction &c);
//
friend CFraction operator+(int i,CFraction &c);
friend int divisor(CFraction &c);
friend int multiple(CFraction &c);
void display();
};
//定义重载运算符+的函数
CFraction CFraction::operator+(CFraction &c)
{
CFraction a;
a.deno=deno*c.deno;
a.nume=nume*c.deno+c.nume*deno;
a=simply(a);
return a;
}
CFraction CFraction::operator-(CFraction &c)
{
CFraction a;
a.deno=deno*c.deno;
a.nume=nume*c.deno-c.nume*deno;
a=simply(a);
return a;
}
CFraction CFraction::operator*(CFraction &c)
{
CFraction a;
a.deno=deno*c.deno;
a.nume=nume*c.nume;
a=simply(a);
return a;
}
CFraction CFraction::operator/(CFraction &c)
{
CFraction a;
a.nume=nume*c.deno;
a.deno=deno*c.nume;
a=simply(a);
return a;
}
CFraction CFraction::operator-()
{
CFraction a;
a.deno=nume;
a.nume=deno;
a=simply(a);
return a;
}
bool CFraction::operator>(CFraction &c)
{
if(nume/deno>c.nume/c.deno)
return true;
else
return false;
}
CFraction CFraction::simply(CFraction &c)
{
CFraction a;
int b=divisor(c);
a.nume=c.nume/b;
a.deno=c.deno/b;
return a;
}
int divisor(CFraction &c)
{
int n=min(c.deno,c.nume);
for(int i=n;i>=0;i--)
{
if(c.deno%i==0 && c.nume%i==0)
{
return i;
break;
}
}
}
CFraction CFraction::operator+(int i)
{
CFraction a;
a.deno=deno;
a.nume=nume+i*deno;
a=simply(a);
return a;
}
CFraction CFraction::operator-(int i)
{
CFraction a;
a.deno=deno;
a.nume=nume-i*deno;
if(a.nume<0){
a.nume=-a.nume;
a=simply(a);
a.nume=-a.nume;
return a;
}else{
a=simply(a);
return a;
}
}
CFraction CFraction::operator*(int i)
{
CFraction a;
a.deno=deno;
a.nume=nume*i;
a=simply(a);
return a;
}
CFraction CFraction::operator/(int i)
{
CFraction a;
a.deno=deno*i;
a.nume=nume;
a=simply(a);
return a;
}
CFraction operator+(int i,CFraction &c)
{
CFraction a;
a.deno=c.deno;
a.nume=c.nume+i*c.deno;
a=a.simply(a);
return a;
}
void CFraction::display()
{
cout<<nume<<"/"<<deno<<endl;
}
//main函数进行测试
int main()
{
CFraction t1(1,2),t2(3,4),t3,t4,t5;
int i=1;
cout<<"t1+t2=";
t3=t1+t2;
t3.display();
cout<<"t2-t1=";
t3=t2-t1;
t3.display();
cout<<"t1*t2=";
t3=t1*t2;
t3.display();
cout<<"t1/t2=";
t3=t1/t2;
t3.display();
cout<<"去倒数";
t3=-t1;
t3.display();
if(t1>t2){
cout<<"t1>t2"<<endl;
}else{
cout<<"t1<t2"<<endl;
}
cout<<"t1+"<<i<<"=";
t4=t1+1;
t4.display();
cout<<i<<"+t1=";
t4=1+t1;
t4.display();
cout<<"t1-"<<i<<"=";
t4=t1-1;
t4.display();
cout<<"t1*"<<i<<"=";
t4=t1*1;
t4.display();
cout<<"t1/"<<i<<"=";
t4=t1/1;
t4.display();
return 0;
}
结果: