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

来源:互联网 发布:pixate for mac 编辑:程序博客网 时间:2024/06/05 05:18
#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";elseif(m_point==1)cout<<c_point;elsecout<<"("<<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;elsereturn 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;}