c++实现重载分数的四则运算

#include<iostream>
using namespace std;

class Point
{
private:
	int c_point;
	int m_point;
	char code;
public:
	Point()
	{
		code='/';
	}
	Point(int n1,int n2)
	{
		c_point=n1;
		m_point=n2;
		code='/';
	}
	void Output()
	{
		if(m_point==0)cout<<"error";
		else
			if(m_point==1)cout<<c_point;
			else
				cout<<"("<<c_point<<code<<m_point<<")";
	}
	int Big(int n1,int n2)          //最大公约数
	{
		int s=1;
		int n=n1,m=n2;
		while(s!=0)
		{
			s=n1%n2;
			n1=n2;               
			n2=s;
		}
		if(n1!=1&&n%n1==0&&m%n1==0)
			return n1;
		else
			return 0;
	}
	//int Small_Multiple()
	Point operator +(Point b)
	{
		Point c;
		int n1,n2,s=1;
		n1=m_point;
		n2=b.m_point;
		if(n1==n2)
		{
			c.c_point=c_point+b.c_point;
			c.m_point=m_point=b.m_point;
		}
		else
		{
			while(s!=0)
			{
				s=n1%n2;
				n1=n2;              
				n2=s;
			}
			s=m_point*b.m_point/n1;         //最小公倍数
			c.m_point=s;
			c.c_point=c_point*(s/m_point)+b.c_point*(s/b.m_point);
		}
		int t;
		t=Big(c.c_point,c.m_point);
		while(t!=0)
		{
			c.c_point=c.c_point/t;
			c.m_point=c.m_point/t;
			t=Big(c.c_point,c.m_point);
		}
		return c;
	}
	Point operator -(Point b)
	{
		Point c;
		int n1,n2,s=1;
		n1=m_point;
		n2=b.m_point;
		if(n1==n2)
		{
			c.c_point=c_point-b.c_point;
			c.m_point=m_point=b.m_point;
		}
		else
		{
			while(s!=0)
			{
				s=n1%n2;
				n1=n2;               //最大公约数
				n2=s;
			}
			s=m_point*b.m_point/n1;         //最小公倍数
			c.m_point=s;
			c.c_point=c_point*(s/m_point)-b.c_point*(s/b.m_point);
		}
		int t;
		t=Big(c.c_point,c.m_point);
		while(t!=0)
		{
			c.c_point=c.c_point/t;
			c.m_point=c.m_point/t;
			t=Big(c.c_point,c.m_point);
		}
		return c;
	}
	Point operator *(Point b)
	{
		Point c;
		c.c_point=c_point*b.c_point;
		c.m_point=m_point*b.m_point;
		int t;
		t=Big(c.c_point,c.m_point);
		while(t!=0)
		{
			c.c_point=c.c_point/t;
			c.m_point=c.m_point/t;
			t=Big(c.c_point,c.m_point);
		}
		return c;
	}
	Point operator /(Point b)
	{
		Point c;
		c.c_point=c_point*b.m_point;
		c.m_point=m_point*b.c_point;
		int t;
		t=Big(c.c_point,c.m_point);
		while(t!=0)
		{
			c.c_point=c.c_point/t;
			c.m_point=c.m_point/t;
			t=Big(c.c_point,c.m_point);
		}
		return c;
	}
};
int main()
{
	int n1,n2,m1,m2;
	//char a1,b1;
	cout<<"请输入两个数的分子,分母分别为:";
	//cin>>n1>>a1>>n2>>m1>>b1>>m2;
	cin>>n1>>n2>>m1>>m2;
	Point a(n1,n2),b(m1,m2);
	cout<<"这两个分数为:";
	a.Output();cout<<"   ";
	b.Output();cout<<endl;
	//本来想在这定义一个选择变量,选择是要进行那个运算符运算
	a.Output();
	cout<<"+";
	b.Output();
	cout<<"=";
	Point c;
	c=a+b;
	c.Output();
	cout<<endl;

	a.Output();
	cout<<"-";
	b.Output();
	cout<<"=";
	c=a-b;
	c.Output();
	cout<<endl;

	a.Output();
	cout<<"*";
	b.Output();
	cout<<"=";
	c=a*b;
	c.Output();
	cout<<endl;

	a.Output();
	cout<<"/";
	b.Output();
	cout<<"=";
	c=a/b;
	c.Output();
	cout<<endl;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值