分式类的重载&&友元c++

这是一篇关于如何重载分子分母加减乘除的文章


懒得把函数定义在类外面

涉及到的__gcd(int a,int b)函数是用来求两个数的最大公约数

在这里插入图片描述

#include<iostream>
#include<algorithm>
//重载分子分母类 
using namespace std;
class Fraction
{
	private:
	int numerator;//分子 
	int denominator;//分母	
	public:
	Fraction(){this->numerator=0;this->denominator=1;}
	Fraction(int num,int den):numerator(num),denominator(den){}
	Fraction(const Fraction &f)//拷贝 
	{
		this->numerator=f.numerator;
		this->denominator=f.denominator;
	}
	friend ostream& operator<<(ostream & o,const Fraction &f)
	{
		if(f.denominator==f.numerator) 
		{
			o<<1;
			return o;
		}
			o<<f.numerator<<"/"<<f.denominator;
			return o;
	} 
	friend istream &operator>>(istream &i,Fraction &f)
	{
		//char c;
		 i >>f.numerator>>f.denominator;
		//return i;
		return i;	
	} 
	friend Fraction operator +(const Fraction &f1,const Fraction &f2)
	{
		static Fraction temp;
		temp.numerator=f1.denominator*f2.numerator+f1.numerator*f2.denominator;
		temp.denominator=f1.denominator*f2.denominator;
		int t=__gcd(temp.numerator,temp.denominator);
		temp.numerator/=t;
		temp.denominator/=t;
		return temp;
	}
	friend Fraction operator -(const Fraction &f1,const Fraction &f2)
	{
		static Fraction temp;
		temp.numerator=f1.numerator*f2.denominator-f1.denominator*f2.numerator;
		temp.denominator=f1.denominator*f2.denominator;
		int t=__gcd(temp.numerator,temp.denominator);
		//if(temp.)
		temp.numerator/=t;
		temp.denominator/=t;
		return temp;
	}
	friend Fraction operator *(const Fraction &f1,const Fraction &f2)
	{
		static Fraction temp;
		temp.numerator=f1.numerator*f2.numerator;
		temp.denominator=f1.denominator*f2.denominator;
		int t=__gcd(temp.numerator,temp.denominator);
		//if(temp.)
		temp.numerator/=t;
		temp.denominator/=t;
		return temp;
	}
	friend Fraction operator /(const Fraction &f1,const Fraction &f2)
	{
		static Fraction temp;
		temp.numerator=f1.numerator*f2.denominator;
		temp.denominator=f1.denominator*f2.numerator;
		int t=__gcd(temp.numerator,temp.denominator);
		//if(temp.)
		temp.numerator/=t;
		temp.denominator/=t;
		return temp;
	}
	friend bool operator !=(const Fraction &f1,const Fraction &f2 )
	{
		return f1.numerator*f2.denominator-f1.denominator*f2.numerator!=0?true:false;
	}
 	friend bool operator >(const Fraction &f1,const Fraction &f2 )
	{
		return f1.numerator*f2.denominator-f1.denominator*f2.numerator>0?true:false;
	}
	friend bool operator <(const Fraction &f1,const Fraction &f2 )
	{
		return ((f1.numerator*f2.denominator-f1.denominator*f2.numerator<0)?true:false);
	}
	friend bool operator ==(const Fraction &f1,const Fraction &f2 )
	{
		return f1.numerator*f2.denominator-f1.denominator*f2.numerator==0?true:false;
	}
	friend bool operator >=(const Fraction &f1,const Fraction &f2 )
	{
		return f1.numerator*f2.denominator-f1.denominator*f2.numerator>=0?true:false;
	}
	friend bool operator <=(const Fraction &f1,const Fraction &f2 )
	{
		return f1.numerator*f2.denominator-f1.denominator*f2.numerator<=0?true:false;
	}
};
int main()
{
	//int x =__gcd(17,8);
	//cout<<x;
	Fraction a,b;
	cin>>a>>b;
	cout<<a<<endl<<b<<endl;
	Fraction c=a+b;
	cout<<c<<endl;
	cout<<a*b<<endl;
	//cout<<a<< (a<b)?"<":">" << b;
	if(a<b)
	{
		cout<<a<<"小于"<<b;
	}
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

歸曦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值