分数类中的运算符重载

/*
* 程序的版权和版本声明部分
* 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){}  
	CFraction operator+(CFraction &c2);
	CFraction operator-(CFraction &c2);
	CFraction operator*(CFraction &c2);
	CFraction operator/(CFraction &c2);
	CFraction operator~();
	bool operator > (CFraction &c2);
	bool operator < (CFraction &c2);
	bool operator == (CFraction &c2);
	void simplify();
	void display();
};

CFraction CFraction::operator+(CFraction &c2)
{
	return CFraction(nume*c2.deno+deno*c2.nume,deno*c2.deno);
}
CFraction CFraction::operator-(CFraction &c2)
{
	return CFraction(nume*c2.deno-deno*c2.nume,deno*c2.deno);
}
CFraction CFraction::operator*(CFraction &c2)
{
	return CFraction(nume*c2.nume,deno*c2.deno);
}
CFraction CFraction::operator/(CFraction &c2)
{
	return CFraction(nume*c2.deno,deno*c2.nume);
}
CFraction CFraction::operator~()
{
	return CFraction(deno,nume);
}
bool CFraction::operator > (CFraction &c2)
{
	if(nume*c2.deno-deno*c2.nume,deno*c2.deno>0)
		return true;
	else
		return false;

}
	bool CFraction::operator < (CFraction &c2)
{
	if(nume*c2.deno-deno*c2.nume,deno*c2.deno<0)
		return true;
	else
		return false;

}
	bool CFraction::operator == (CFraction &c2)
{
	if(nume*c2.deno-deno*c2.nume,deno*c2.deno==0)
		return true;
	else
		return false;

}
// 分数化简,使分子分母没有公因子
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),c2(7,16),c;
	cout<<"c1为:";
	c1.display();
	cout<<"c2为:";
	c2.display();
    cout<<"下面比较两个数大小:\n";
	if (c1>c2) cout<<"c1>c2"<<endl;
	if (c1<c2) cout<<"c1<c2"<<endl;
	if (c1==c2) cout<<"c1==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();
	cout<<endl;
	return 0;
}
	
	


运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值