`
txf2004
  • 浏览: 6830556 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《C++第八周实验报告3-1》---实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算

 
阅读更多
//【任务3】实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算。
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:  CFractioncpp                           
* 作    者:   计114-3 王兴锋     
* 完成日期:    2012  年  4  月  9  日
* 版 本 号:       V 1.0

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

using namespace std;

class CFraction
{
private:
	int nume;  // 分子
	int deno;  // 分母
	int gcd(int m, int n);
public:
	//构造函数及运算符重载的函数声明
	CFraction(int n = 1, int d = 1){if (d == 0) return;nume = n, deno = d;}
	friend CFraction operator + (CFraction &c1, CFraction &c2);
	friend CFraction operator - (CFraction &c1, CFraction &c2);
	friend CFraction operator * (CFraction &c1, CFraction &c2);
	friend CFraction operator / (CFraction &c1, CFraction &c2);
	friend CFraction operator - (CFraction &c);
	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 simplify();
	void display();
};
void CFraction::simplify()  
{  
    int n = gcd(deno, nume);  
    deno /= n;     // 化简   
    nume /= n;  
}
int CFraction::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;
}
CFraction operator + (CFraction &c1, CFraction &c2)
{
	CFraction c;

	c.deno = c1.deno * c2.deno;
	c.nume = c1.nume*c2.deno + c2.nume*c1.deno;

	c.simplify();

	return c;
}
CFraction operator - (CFraction &c1, CFraction &c2)
{
	CFraction c;

	c.deno = c1.deno * c2.deno;
	c.nume = c1.nume*c2.deno - c2.nume*c1.deno;

	c.simplify();

	return c;
}
CFraction operator * (CFraction &c1, CFraction &c2)
{
	CFraction c;

	c.deno = c1.deno * c2.deno;
	c.nume = c1.nume * c2.nume;

	c.simplify();

	return c;
}
CFraction operator / (CFraction &c1, CFraction &c2)
{
	CFraction c;

	c.deno = c1.deno * c2.nume;
	c.nume = c1.nume * c2.deno;

	c.simplify();

	return c;
}
CFraction operator - (CFraction &c)
{
	return CFraction(-c.nume, c.deno);
}
bool CFraction::operator > (CFraction &c)
{
	CFraction cf(*this / c);

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

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

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

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

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

	if (cf.nume/cf.deno != 1)
		return true;
	else
		return false;
}

//重载函数的实现及用于测试的main()函数
void main()
{
	CFraction c1(3, 8), c2(1, 8), c3(1, 8);

	cout << "c1=";
	c1.display();
	cout << "c2=";
	c2.display();
	cout << "c3=";
	c3.display();

	if (c1 > c2) cout << "c1 > c2" << endl;
	if (c2 < c1) cout << "c2 < c1" << endl;
	if (c2 >= c3) cout << "c2 >= c3" << endl;
	if (c2 <= c3) cout << "c2 <= c3" << endl;
	if (c2 == c3) cout << "c2 == c3" << endl;
	if (c1 != c2) cout << "c1 != c2" << endl;

	cout << "c1+c2=";
	(c1 + c2).display();

	cout << "c1-c2=";
	(c1 - c2).display();

	cout << "c1*c2=";
	(c1 * c2).display();

	cout << "c1/c2=";
	(c1 / c2).display();

	c3= -c3;
	c3.display();

	system("PAUSE");
}
/*
要认识的函数的返回值类型,不可随意的比较。
因其返回值类型并不是你想象中的数值。
*/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics