/*
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 作者:隋 鑫
* 完成日期: 2013年 4 月 19 日
* 版本号: v1.0
* 输入描述:无
* 问题描述:
* 程序输出:
*/
#include<iostream>
#include<Cmath>
using namespace std;
int gcd(int m, int n);
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(){int nu=0;int de=1;}
CFraction(int nu,int de):nume(nu),deno(de){}
friend CFraction operator+(int&i,CFraction &c);
friend CFraction operator-(int&i,CFraction &c);
friend CFraction operator*(int&i,CFraction &c);
friend CFraction operator/(int&i,CFraction &c);
friend CFraction operator+(CFraction &c,int&i);
friend CFraction operator-(CFraction &c,int&i);
friend CFraction operator*(CFraction &c,int&i);
friend CFraction operator/(CFraction &c,int&i);
void simplify();
void display();
};
CFraction operator+(int&i,CFraction &c)
{
return CFraction(i*c.deno+c.nume,c.deno);
}
CFraction operator-(int&i,CFraction &c)
{
return CFraction(i*c.deno-c.nume,c.deno);
}
CFraction operator*(int&i,CFraction &c)
{
return CFraction(i*c.nume,c.deno);
}
CFraction operator/(int&i,CFraction &c)
{
return CFraction(i*c.deno,c.nume);
}
CFraction operator+(CFraction &c,int&i)
{
return CFraction(i*c.deno+c.nume,c.deno);
}
CFraction operator-(CFraction &c,int&i)
{
return CFraction(c.nume-i*c.deno,c.deno);
}
CFraction operator*(CFraction &c,int&i)
{
return CFraction(i*c.nume,c.deno);
}
CFraction operator/(CFraction &c,int&i)
{
return CFraction(c.nume,i*c.deno);
}
// 分数化简,使分子分母没有公因子
void CFraction::simplify()
{
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;
}
void CFraction:: display()
{
cout<<nume<<"/"<<deno<<endl;
}
int main()
{
CFraction c1(3,8),c;
int c2=13;
cout<<"c1为:";
c1.display();
cout<<"c2为:"<<c2<<endl;
c=c1+c2;
cout<<"c1+c2=";
c.simplify();
c.display();
c=c1-c2;
cout<<"c1-c2=";
c.simplify();
c.display();
c=c1*c2;
cout<<"c1*c2=";
c.simplify();
c.display();
c=c1/c2;
cout<<"c1/c2=";
c.simplify();
c.display();
c=c2/c1;
cout<<"c2/c1=";
c.simplify();
c.display();
cout<<endl;
return 0;
}
运行结果: