面向对象实验:有理数是一个可以化为一个分数的数。定义并实现一个有理数类(c++)

函数定义

 

void add(Rational r); //本对象与r相加,结果保存在本对象中
void sub(Rational r);
void multiple(Rational r);
void divide(Rational r);
bool equal(Rational r);
void display();
int gcd(int m,int n);

 类定义

class Rational
{
	public:
			Rational(int aa,int bb){a=aa;b=bb;};
			void addNumber(Rational r);
			void subNumber(Rational r);
			void multipleNumber(Rational r);
			void divideNumber(Rational r);
			bool equalNumber(Rational r);
			void displayNumber();
	private:
			int a;
			int b;
			void optimization();
};

 函数实现

void Rational::addNumber(Rational r)
{
	a = a * r.b + b * r.a; 
	b = b * r.b;
	optimization();
}
void Rational::subNumber(Rational r) 
{
	a = a * r.b - b * r.a;
	b = b * r.b;
	optimization();//化简 
}
void Rational::multipleNumber(Rational r) 
{
	//判断分母不能为0
	if(b==0||r.b==0)
	{
		cout << "分母不能为0!" << endl; 
	}
	else if(a==0||r.a==0)
	{
		cout << "0" << endl;
	}
	else
	{
		a = a * r.a;
		b = b * r.b; 
		optimization();//化简 
	}
}
void Rational::divideNumber(Rational r) 
{
	if(b==0||r.b==0||r.a==0)
	{
		cout << "分母不能为0" << endl;
	}
	else if(r.b==0)
	{
		cout << "0" << endl;
	}
	else
	{
		a = a * r.b ;
		b = b * r.a ;
		optimization();//化简 
	}
}
int gcd(int m,int n)
{
    if (m < n)
	{
		int tmp = m;
        m = n;
        n = tmp;
    }
    if (n == 0) 
    {
		return m;
	}
    while (n > 0)
	{       
    	int tmp = m % n;
        m = n;
        n = tmp;
    }
 
return m;
}	
void  Rational::optimization()
{
	int c = gcd(a,b);
	a = a/c;
	b = b/c;
}
bool Rational::equalNumber(Rational r)//通过该函数访问私有成员 
{
	r.optimization();
	if(a==r.a && b==r.b )
	{
		return 1;
	}
	else
	{
		return 0; 
	}
}
void Rational::displayNumber() 
{
	optimization();
	cout << "有理数为" << a << "/" << b << endl;
}

int gcd(int m,int n){
       if (m < n){       
              int tmp = m;
              m = n;
              n = tmp;
       }
 
       if (n == 0) return m;
      
       while (n > 0){       
              int tmp = m % n;
              m = n;
              n = tmp;
       }
 
       return m;
}

 主函数

#include<iostream>
using namespace std;
int main()
{
	Rational number1(1,8);
	Rational number2(3,6);
	number1.displayNumber() ;
	number2.displayNumber() ;
	number1.addNumber(number2) ;
	number1.displayNumber() ;
	number1.subNumber(number2) ;
	number1.displayNumber() ;
	number1.multipleNumber(number2) ;
	number1.displayNumber() ;
	number1.divideNumber(number2) ;
	number1.displayNumber() ;
	return 0; 	
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值