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

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* 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");  
}  

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

欢迎大家多给评语


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
有理数)创建一个名为 Rational 的类,用于对分数进行算术运算。编写一个程序来测试你的类。使用整数变量来表示类的私有实例变量——分子和分母。 提供一个构造函数,使该类的对象能够在声明时进行初始化。构造函数应以简化形式存储分数分数 2/4 等价于 1/2,并将作为分子中的 1 和分母中的 2 存储在对象中。 如果没有提供初始值设定项,请提供默认值为 1 的无参数构造函数。 提供执行以下每个操作的公共方法: a) 将两个有理数相加:相加的结果应以简化形式存储。 b) 两个有理数相减:相减的结果应以简化形式存储。 c) 将两个有理数相乘:相乘的结果应以简化形式存储。 d) 将两个有理数相除:相除的结果应以简化形式存储。 e) 以 a/b 的形式返回有理数的字符串表示形式,其中 a 是分子,b 是分母。 f) 以浮点格式返回有理数的字符串表示形式. (考虑提供格式化功能,类的用户能够指定小数点右侧的精度位数。) 【Sample output 1】 Enter numerator 1: 12 Enter denominator 1: 3 Enter numerator 2: 5 Enter denominator 2: 14 Enter precision: 3 a=4/1 b=5/14 a + b = 61/14 = 4.357 a - b = 51/14 = 3.643 a * b = 10/7 = 1.429 a / b = 56/5 = 11.200 【Sample output 2】 Enter numerator 1: 1 Enter denominator 1: 4 Enter numerator 2: 75 Enter denominator 2: 35 Enter precision: 1 a=1/4 b=15/7 a + b = 67/28 = 2.4 a - b = -53/28 = -1.9 a * b = 15/28 = 0.5 a / b = 7/60 = 0.1 Note: The red texts are inputed ,others are output texts. Just use a space to seperate words

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值