前面学习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;
}
输出结果: