函数定义
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;
}