码迷,mamicode.com
首页 > 编程语言 > 详细

c++重载运算符实验定义分数类实现分数间四则运算

时间:2015-04-25 18:11:14      阅读:1475      评论:0      收藏:0      [点我收藏+]

标签:

实验二           自定义类型的运算

【实验目的】

  1. 理解运算符函数与运算符重载方法;
  2. 掌握运算符重载为友元函数;

 

【实验内容】

题目:

在C++中,分数不是预先定义的,建立一个分数类,使之具有以下功能:能防止分母为0、当分数不是最简形式时进行约分及分母为负数。用重载运算符完成加法、减法、乘法、除法等四则运算。

 

源程序代码:

#include<iostream>

#include<cstdlib>

using namespace std;

int gcd(int m,int n)//求最大公约数函数

{

    if (m < n)

    {

        int tmp = m;

        m = n;

        n = tmp;

    }

    if (n == 0)

        return m;

    else

        return gcd(n,m % n);

}

 

class fraction   //构建分数类

{

    int a,b;

public:

    fraction(int x=0,int y=1)         //构造函数

    {

        if(y==0)                      //判断分母是否为0

              {

                     cout<<"分母为零"<<endl;

                     exit(0);

              }

        if(y<0)                         //分母小于0时将负号转移到分子上

        {

            a=(-1)*x;

            b=(-1)*y;

        }

        a=x;

        b=y;

    }

    fraction(const fraction&f)//拷贝构造

    {

        a=f.a;

        b=f.b;

}

~fraction(){}//析构函数

    void setfraction(int x,int y)//在类外重新设置分数值

    {

        if(y==0)

          {

                     cout<<"分母为零"<<endl;

                     exit(0);

              }

        if(y<0)

        {

            a=(-1)*x;

            b=(-1)*y;

        }

        a=x;

        b=y;

    }

    void show()//输出最简结果

 

    {

        int flag=1,m;

        if(a<0)

        {

            a=-a;

            flag=-flag;

        }

        if(b<0)

        {

            b=-b;

            flag=-flag;

        }

              m=gcd(a,b);

        a=a/m;

        b=b/m;

        a=a*flag;

        if(a==0||b==1)

            cout<<a<<endl;

        else

            cout<<a<<"/"<<b<<endl;

}

    friend   fraction operator  +  (fraction  &  f1,fraction & f2 ) //以友元函数重载运算符

    {

        return fraction(f1.a * f2.b + f1.b * f2.a , f1.b * f2.b);

    }

    friend  fraction operator  -  (fraction & f1,fraction & f2)

    {

        return fraction(f1.a*f2.b-f1.b*f2.a,f1.b*f2.b);

    }

    friend fraction operator  *  (fraction & f1,fraction & f2)

    {

        return fraction(f1.a*f2.a,f1.b*f2.b);

    }

    friend fraction operator  /  (fraction & f1,fraction & f2)

    {

        return fraction(f1.a*f2.b,f1.b*f2.a);

    }

};

int main()

{

    int a,b;

    cout<<"请输入第一个分数的分子分母"<<endl;

    cin>>a>>b;

    int c,d;

    cout<<"请输入第二个分数的分子分母"<<endl;

    cin>>c>>d;

    fraction a1,a2,a3,a4,a5,a6;

    a1.setfraction(a,b);

    a2.setfraction(c,d);

    a3=a1+a2;

       cout<<"加法结果"<<endl;

    a3.show();

    a4=a1-a2;

       cout<<"减法结果"<<endl;

    a4.show();

    a5=a1*a2;

       cout<<"乘法法结果"<<endl;

    a5.show();

    a6=a1/a2;

       cout<<"除法法结果"<<endl;

a6.show();

 return 0;

}

 

运行结果截图:

 

 

【实验小结】

  1. 在运算完成后输出所需结果时进行约分,使之输出最简结果;
  2. 可以将化简部分写一个单独的函数来使用;
  3. 在重载运算符的时候再运算符前后打上空格使格式好看。

 技术分享

c++重载运算符实验定义分数类实现分数间四则运算

标签:

原文地址:http://www.cnblogs.com/qq252756561/p/4456161.html

(1)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!