您的位置:首页 > 运维架构

分数类中的运算符重载

2014-04-22 13:25 176 查看
/*
* 程序的版权和版本声明部分
* Copyright (c)2014, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: fibnacci.cpp
* 作    者:高古尊
* 完成日期:2014年3月27日
* 版本号: v1.0
*
* 输入描述:
* 问题描述:
* 程序输出:
* 问题分析:
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume;  // 分子
int deno;  // 分母
public:
CFraction(int nu=0,int de=1);   //构造函数,初始化用
void set(int nu=0,int de=1);    //置值,改变值时用
void input();	 //按照"nu/de"的格式,如"5/2"的形式输入
void simplify();	 //化简(使分子分母没有公因子)
void amplify(int n);	 //放大n倍,如2/3放大5倍为10/3
void output(int style=0);//输出:以8/6为例,style为0时,原样输出8/6;
friend CFraction operator+(CFraction&,CFraction&);
friend CFraction operator-(CFraction&,CFraction&);
friend CFraction operator*(CFraction&,CFraction&);
friend CFraction operator/(CFraction&,CFraction&);
friend bool operator>(CFraction&,CFraction&);
friend bool operator<(CFraction&,CFraction&);
friend bool operator<=(CFraction&,CFraction&);
friend bool operator>=(CFraction&,CFraction&);
friend bool operator==(CFraction&,CFraction&);
friend bool operator!=(CFraction&,CFraction&);
void display();
};
int main()
{
CFraction x(1,3),y(-5,10),s;
cout<<"分数x=1/3      y=-5/10"<<endl;
s=x+y;
cout<<"x+y=";
s.simplify();
s.display();
s=x-y;
cout<<"x-y=";
s.simplify();
s.display();
s=x*y;
cout<<"x*y=";
s.simplify();
s.display();
s=x/y;
cout<<"x/y=";
s.simplify();
s.display();
x.simplify();
x.display();
if (x>y) cout<<"大于"<<endl;
if (x<y) cout<<"小于"<<endl;
if (x==y) cout<<"等于"<<endl;
y.simplify();
y.display();
cout<<endl;
return 0;
}

CFraction::CFraction(int nu,int de )
{
nume=nu;
deno=de;
return ;
}
void CFraction::set(int nu,int de)
{
nume=nu;
deno=de;
}
void CFraction::input()
{
char ch;
cin>>nume>>ch>>deno;
}
void CFraction::simplify()
{
int n,n1,n2;
n1=(nume>=0)?nume:-nume;
n2=(deno>=0)?deno:-deno;
n=(n1>n2)?n1:n2;
for(; n>1; n--)
{
if(nume%n==0&&deno%n==0)
{
nume/=n;
deno/=n;
}
}
}
void CFraction::amplify(int n)
{
nume*=n;
}
void CFraction::output(int style)
{
switch(style)
{
case 0:
cout<<nume<<'/'<<deno<<endl;
case 1:
simplify();
cout<<nume<<'/'<<deno<<endl;
case 2:
int n,m;
n=nume/deno;
m=nume%deno;
if(m==0)
{
m=1;
}
cout<<n<<'('<<m<<'/'<<deno<<')'<<endl;
case 3:
cout<<(double)nume/deno<<endl;;
}
}
CFraction operator+(CFraction &n1,CFraction &n2)
{
CFraction n;
n.deno=n1.deno*n2.deno;
n.nume=n1.nume*n2.deno+n2.nume*n1.deno;
//n.simplify();
return n;
}
CFraction operator-(CFraction&n1,CFraction&n2)
{
CFraction n;
n.deno=n1.deno*n2.deno;
n.nume=n1.nume*n2.deno-n2.nume*n1.deno;
//n.simplify();
return n;
}
CFraction operator*(CFraction&n1,CFraction&n2)
{
CFraction n;
n.deno=n1.deno*n2.deno;
n.nume=n1.nume*n2.nume;
n.simplify();
return n;
}
CFraction operator/(CFraction&n1,CFraction&n2)
{
CFraction n;
n.deno=n1.deno*n2.nume;
n.nume=n1.nume*n2.deno;
//n.simplify();
return n;
}
bool operator>(CFraction&n1,CFraction&n2)
{
return(n1.nume*n2.deno>n2.nume*n1.deno)?true:false;
}
bool operator<(CFraction&n1,CFraction&n2)
{
return(n1.nume*n2.deno<n2.nume*n1.deno)?true:false;
}
bool operator<=(CFraction&n1,CFraction&n2)
{
return(n1<n2||n1==n2)?true:false;
}
bool operator>=(CFraction&n1,CFraction&n2)
{
return(n1>n2||n1==n2)?true:false;
}
bool operator==(CFraction&n1,CFraction&n2)
{
return(n1.nume*n2.deno==n2.nume*n1.deno)?true:false;
}
bool operator!=(CFraction&n1,CFraction&n2)
{
return(n1==n2)?false:true;
}
void CFraction::display()
{
cout<<nume<<'/'<<deno<<endl;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class operator 对象