1218上机

#include<iostream>

using namespace std;



class Fraction {
private:
	int m_numerator = 0;
	int m_denominator = 1;

public:

	int getdenominator() const { return m_denominator; }                  //获取分母
	int getnumerator() const { return m_numerator; }                      //获取分子
	void setdenominator(int a) { m_denominator = a; }
	void setnumerator(int b) { m_numerator = b; }
	void reduction(Fraction d1, Fraction d2);
	int  gcd(int x, int y);
	void reduce();



	Fraction(int above = 0, int below = 1) :
		m_numerator(above), m_denominator(below) {
		cout << "Constructor called" << endl;
	}

	Fraction(const Fraction& rhs) : m_numerator(rhs.m_numerator), \
		m_denominator(rhs.m_denominator) {
		cout << "Copy constructor called" << endl;
	}

	~Fraction() {}                                                         //析构函数
};



Fraction divide1(const Fraction& divident, const Fraction& divisor) {
	return Fraction(divident.getnumerator() * divisor.getdenominator(), \
		divident.getdenominator() * divisor.getnumerator());
}


Fraction divide2(Fraction divident, Fraction divisor) {
	Fraction result(divident.getnumerator() * divisor.getdenominator(), \
		divident.getdenominator() * divisor.getnumerator());
	return result;
}


int  Fraction::gcd(int x, int y)                                                 //求最大公因数
{
	if (y != 0)
		return gcd(y, x % y);
	else return x;

}


void Fraction::reduce()                                                          //约分
{
	int n = gcd(m_denominator, m_numerator);
	m_denominator = m_denominator / n;
	m_numerator = m_numerator / n;
}


void Fraction::reduction(Fraction d1, Fraction  d2)                                      //通分
{
	for (int k = 1; k <= (d1.getdenominator() * d2.getdenominator()); k++)
	{
		if (k % d1.getdenominator() == 0 && k % d2.getdenominator() == 0)
		{
			d1.m_numerator = d1.m_numerator * (k / d1.m_denominator);
			d2.m_numerator = d2.m_numerator * (k / d2.m_denominator);
			d1.setdenominator(k);
			d2.setdenominator(k);

			break;
		}
	}


}



Fraction operator/(const Fraction& right, const Fraction& left)                                    //使用 operator/操作符重载实现两个分数的除法运算。
{
	Fraction result(left.getnumerator() * right.getdenominator(), left.getdenominator() * right.getdenominator());
	return result;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值