C++运用类和对象实现分数加法计算

前面学习C语言的时候也面向过程写过类似的代码。接触C++后,想试着改用面向对象的思想来处理这个过程,顺便练练手,熟悉一下类和对象的使用。

//
//  main.cpp
//  类和对象实现分数加法计算
//
//  Created by louyu on 2019/1/26.
//  Copyright © 2019 louyu. All rights reserved.
//

#include <bits/stdc++.h>
using namespace std;

//定义分数类
class fract
{
private:
    int num; //分子
    int den; //分母
public:
    fract(int a=0,int b=1); //构造方法
    int gcd(int m,int n); //计算最大公因数
    fract add(fract f); //相加方法
    void show(); //结果显示方法
};

fract::fract(int a,int b)
{
    num=a;
    den=b;
}

int fract::gcd(int m,int n)
{
    int i,result=1;
    if(m>n)
    {
        m=m^n;
        n=m^n;
        m=m^n;
    }
    for (i=m; i>=1; i--)
    {
        if(m%i==0&&n%i==0)
        {
            result=i;
            break;
        }
    }
    return result;
}

fract fract::add(fract f)
{
    fract result; //实例化结果对象
    int den_; //定义两个分数分母的最小公倍数
    //运用了一个结论:两个数的乘积等于它们最大公因数与最小公倍数的乘积,从而算出了最小公倍数
    den_=this->den*f.den/gcd(den, f.den);
    //通分
    num*=(den_/den);
    f.num*=(den_/f.den);
    result.den=den_;
    result.num=this->num+f.num;
    //约分
    if(result.gcd(result.num, result.den)!=1)
    {
        int k=result.gcd(result.num, result.den);
        result.num/=k;
        result.den/=k;
    }
    return result;
}

void fract::show()
{
    cout<<this->num<<"/"<<this->den<<endl;
}

int main()
{
    fract f1(1,5);
    fract f2(7,20);
    fract f3;
    f3=f1.add(f2);
    f3.show();
    return 0;
}

输出结果:

发表评论

电子邮件地址不会被公开。 必填项已用*标注