运算符的重载(分数的加法)

 设计一个分数类rationalNumber,该类中包括分子和分母两个成员数据,并具有下述功能:

1)建立构造函数,它能防止分母为零(分母为0时,输出"denominator equal zero"),当分数不是最简形式时进行约分,并避免分母为负数。

2)重载加法运算符。

#include <iostream>
 #include <cmath>
 using namespace std;

 class rationalNumber
 {
 public:
     rationalNumber(int m,int n)
     {
         if(n==0)
         {
             cout<<"denominator equal zero"<<endl;
         }
         else
         {
             int count=0;//
             if(n<0)
                 m=-m,n=-n;
             a=m,b=n;
             m=abs(m),n=abs(n);
             while(n!=0)//求最小公约数m
             {
                 int c=m%n;
                 m=n;
                 n=c;
             }
             a=a/m,b=b/m;//约分,分数化为最简
         }
     }
     rationalNumber()
     {
     }
     rationalNumber operator +(rationalNumber &r)
     {
         return rationalNumber(a*r.b+b*r.a,b*r.b);//调用构造函数,再约分,分数化为最简

     }
     void show(rationalNumber &r1,rationalNumber &r2)
     {
         cout<<r1.a<<"/"<<r1.b;
         if(r2.a<0)
             cout<<r2.a<<"/"<<r2.b<<"=";
         else
             cout<<"+"<<r2.a<<"/"<<r2.b<<"=";
         if(a==b  ||  a==-b  &&  a!=0)
         {
             if(a==b)
                 cout<<"1"<<endl;
             else
                 cout<<"-1"<<endl;
         }
         else
         {
             if(a==0)
                 cout<<"0"<<endl;
             else
                 cout<<a<<"/"<<b<<endl;
         }
     }
 private:
     int a,b;
 };

 int main()
 {
     int T,m,n,k,l;
     cin>>T;
     while(T--)
     {
         cin>>m>>n>>k>>l;
         rationalNumber r1(m,n),r2(k,l),r3;
           if(n==0  ||  l==0)//如果分母n,l为零,跳过下面句子,继续循环
             continue;//

         r3=r1+r2;
         r3.show(r1,r2);
     }
     return 0;
 } 


  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值