【C++】实现分数类的四则运算及逻辑判断(重载)

题目:

【实现一个分数类Fraction】
分别输入两个不相等的正分数的分子和分母。
要求:
1.重载四则运算符+、-、*、/,输出它们进行加减乘除四则运算后的结果。
2.重载逻辑运算符==、!=、<、<=、>、>= ,并将它们进行比较判断。若为真,则返回1;若非真,则返回0。从而输出6种逻辑判断结果。

样例:

输入:

1 2
3 4

输出:

a= 1/2, b = 3/4
1/2 + 3/4 = 5/4
1/2 - 3/4 = -1/4
1/2 * 3/4 = 3/8
1/2 / 3/4 = 2/3
a == b is 0
a != b is 1
a <= b is 1
a >= b is 0
a < b is 1
a > b is 0

输入:

5 6
7 8

输出:

a= 5/6, b = 7/8
5/6 + 7/8 = 41/24
5/6 - 7/8 = -1/24
5/6 * 7/8 = 35/48
5/6 / 7/8 = 20/21
a == b is 0
a != b is 1
a <= b is 1
a >= b is 0
a < b is 1
a > b is 0

代码如下:

#include <iostream>
using namespace std;
class Fraction  //定义分数类 
{
    int numerator,denominator;  //前者为分子,后者为分母 
    public:  //外部接口
        Fraction(int a,int b);
        bool operator == (Fraction const& f) const;
        bool operator != (Fraction const& f) const;
        bool operator >  (Fraction const& f) const;
        bool operator >= (Fraction const& f) const;
        bool operator <  (Fraction const& f) const;
        bool operator <= (Fraction const& f) const;
        Fraction operator + (Fraction const& f) const;
        Fraction operator - (Fraction const& f) const;
        Fraction operator * (Fraction const& f) const;
        Fraction operator / (Fraction const& f) const;        
        friend std::istream& operator >> (std::istream&, Fraction& f);
        friend std::ostream& operator << (std::ostream&, Fraction const& f);      
    private:  //内部私有成员
        void simplify();
};

Fraction::Fraction(int a=1,int b=1)  //构造函数 
{
	numerator=a;
	denominator=b;
}

void Fraction::simplify()  //约分函数 
{
	int i;
	for(i=numerator; ;i--)
	{
		if(denominator%i==0 && numerator%i==0)
		{
			numerator /= i;
			denominator /= i;
			break;
		}
	}
}

Fraction Fraction::operator + (Fraction const& f) const  //重载分数类加法 
{
	Fraction t;
    t.numerator=numerator*f.denominator+f.numerator*denominator;
    t.denominator=denominator*f.denominator;
	t.simplify();
	return t;
}

Fraction Fraction::operator - (Fraction const& f) const  //重载分数类减法 
{
	Fraction t;
	t.numerator=numerator*f.denominator-f.numerator*denominator;
    t.denominator=denominator*f.denominator;
	t.simplify();
	return t;
}

Fraction Fraction::operator * (Fraction const& f) const  //重载分数类乘法
{
	Fraction t;
	t.numerator=numerator*f.numerator;
	t.denominator=denominator*f.denominator;
	t.simplify();
	return t;
} 

Fraction Fraction::operator / (Fraction const& f) const  //重载分数类除法
{
	Fraction t;
	t.numerator=numerator*f.denominator;
	t.denominator=denominator*f.numerator;
	t.simplify();
	return t;
}

bool Fraction::operator == (Fraction const& f) const  //重载分数类==运算 
{
	if( (numerator==f.numerator) && (denominator==f.denominator) )
	return 1;
	else
	return 0;
}

bool Fraction::operator != (Fraction const& f) const  //重载分数类!=运算
{
	if( (numerator!=f.numerator) || (denominator!=f.denominator) )
	return 1;
	else
	return 0;
}

bool Fraction::operator >  (Fraction const& f) const  //重载分数类>运算
{
	if( (numerator*f.denominator-denominator*f.numerator)>0 )
	return 1;
	else
	return 0;
}

bool Fraction::operator >= (Fraction const& f) const  //重载分数类>=运算
{
	if( (numerator*f.denominator-denominator*f.numerator)>=0 )
	return 1;
	else
	return 0;
}

bool Fraction::operator <  (Fraction const& f) const  //重载分数类<运算
{
	if( (numerator*f.denominator-denominator*f.numerator)<0 )
	return 1;
	else
	return 0;
}

bool Fraction::operator <= (Fraction const& f) const  //重载分数类<=运算
{
	if( (numerator*f.denominator-denominator*f.numerator)<=0 )
	return 1;
	else
	return 0;
}

std::istream& operator >> (std::istream& in, Fraction& f)  //重载输入 
{
	in>>f.numerator>>f.denominator;
	f.simplify();
	return in;
}

std::ostream& operator << (std::ostream& out, Fraction const& f)  //重载输出
{
	if( (f.denominator>0 && f.numerator>0) || (f.denominator>0 && f.numerator<0) )
	{
        out<< f.numerator <<"/"<< f.denominator;
    }
    else if( (f.denominator<0 && f.numerator>0) || (f.denominator<0 && f.numerator<0) ) //这里需要注意一下,如果为负分数,应该输出(-x/y)类型,而不是(x/-y)类型 
    {
    	out<< -f.numerator <<"/"<< -f.denominator;
	}
    return out;
} 

int main()  //主函数,分别进行两个分数类对象的四则运算以及大小判断 
{
	Fraction a,b;
	cin>>a>>b;
	cout << "a= " << a << ", b = " << b << endl;
	cout << a << " + " << b << " = " << a + b << endl;
	cout << a << " - " << b << " = " << a - b << endl;
	cout << a << " * " << b << " = " << a * b << endl;
	cout << a << " / " << b << " = " << a / b << endl;	
	cout << "a == b is " << (a == b) << endl;
	cout << "a != b is " << (a != b) << endl;
	cout << "a <= b is " << (a <= b) << endl;
	cout << "a >= b is " << (a >= b) << endl;
	cout << "a < b is " << (a < b) << endl;
	cout << "a > b is " << (a > b) << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/JeronZhou/article/details/104878367