分数类中的运算符重载(第八周任务三)

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:                              
* 作    者: 李超                             
* 完成日期: 2012  年 4  月 10   日
* 版 本 号:          01.08.03

* 对任务及求解方法的描述部分
* 问题描述:  实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
* 程序头部的注释结束

*/

头文件CFraction.h

#include <iostream>

using namespace std;

class CFraction
{
private:

	int nume;  // 分子
	int deno;  // 分母

public:

	//构造函数,初始化用
	CFraction(int nu=0,int de=1): nume(nu), deno(de) {};

	//加减乘除四则运算
    CFraction operator + (CFraction &c);
	CFraction operator - (CFraction &c);
	CFraction operator * (CFraction &c);
	CFraction operator / (CFraction &c);
	
	//取正反
	CFraction operator + ();//取正
	CFraction operator - ();//取反

	//判断
	bool operator > (CFraction &c);
	bool operator < (CFraction &c);
	bool operator >= (CFraction &c);
	bool operator <= (CFraction &c);
	bool operator == (CFraction &c);
	bool operator !=(CFraction &c);


	void display();			//化简、输出
};

//加减乘除四则运算
CFraction CFraction::operator + (CFraction &c)
{
	return CFraction (nume * c.deno  + deno * c.nume , deno * c.deno);
}

CFraction CFraction::operator - (CFraction &c)
{
	return CFraction (nume * c.deno  - deno * c.nume , deno * c.deno);
}

CFraction CFraction::operator * (CFraction &c)
{
	return CFraction (nume * c.nume , deno * c.deno);
}

CFraction CFraction::operator / (CFraction &c)
{
	return CFraction (nume * c.deno , deno * c.nume);
}
	
//取正反
CFraction CFraction::operator + ()//取正
{
	return *this;
}

CFraction CFraction::operator - ()//取反
{
	CFraction c;

	c.nume = -nume;
	c.deno = deno;

	return c;
}

//判断
bool CFraction::operator > (CFraction &c)
{
	if (nume * c.deno > c.nume * deno)
		return true;
	else
		return false;
}

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

bool CFraction::operator >= (CFraction &c)
{
	if (nume * c.deno >= c.nume * deno)
		return true;
	else
		return false;
}

bool CFraction::operator <= (CFraction &c)
{
	if (nume * c.deno <= c.nume * deno)
		return true;
	else
		return false;
}

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

bool CFraction::operator !=(CFraction &c)
{
	if (nume * c.deno != c.nume * deno)
		return true;
	else
		return false;
}


void CFraction::display()			//化简(使分子分母没有公因子)
{
	int nu = nume, de = deno,temp, a;

	if(nu > de)
	{
		temp = nu;
		nu = de;
		de= temp;
	}

	while(nu != 0)
	{
		a = de % nu;
		de = nu;
		nu = a;
	}

	deno = deno / de;
	nume = nume / de; 

	cout <<nume <<'/' <<deno <<endl;
}

主函数CFraction.cpp

#include <iostream>
#include "CFraction.h"

using namespace std;

void main()  
{  
    CFraction x(5, 9), y(-4, 7), z; 

    cout <<"分数x=5/9" <<'\t' <<"y=-4/7" <<endl;  

    z = +x + y;  

    cout <<"+x+y=";  

    z.display (); 

	cout <<"-x-y=";

	z = -x - y;

	z.display ();

    z = x - y;  

    cout <<"x-y=";  

    z.display ();  

    z = x * y;  

    cout <<"x*y="; 

    z.display ();  

    z = x / y;  

    cout <<"x/y="; 

    z.display ();  

    z = -x + y;  

    cout <<"-x+y=";  

    z.display ();  
    x.display();  

    if (x > y) 
		cout <<"大于"<<endl; 

    if (x<y) 
		cout<<"小于"<<endl; 

    if (x==y) 
		cout<<"等于"<<endl; 
	
    y.display ();

    cout<<endl;  
    
	system("PAUSE");  
}  

编出来一个,全都出来了,感觉好爽!

欢迎大家多给评语


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值