21xrx.com
2024-12-23 02:23:52 Monday
登录
文章检索 我的文章 写文章
C++实现分数类
2023-06-27 14:17:07 深夜i     --     --
C++ 分数类 实现

在C++中实现分数类可以让我们更方便地处理分数相关的运算和业务逻辑。分数(也称有理数)是形如a/b的数,其中a和b均为整数,b不等于0。下面我们来看看如何在C++中实现分数类。

首先我们需要定义分数类的成员变量。由于分数有两个数字表示,因此我们可以使用两个整型变量分别表示分子和分母。另外,我们还需要考虑到约分的问题,在此处加入一个私有函数来求最大公约数。


class Fraction {

public:

  Fraction(int a, int b) {

    numerator = a;

    denominator = b;

    reduce();

  }

private:

  int numerator;  // 分子

  int denominator; // 分母

  // 辗转相除法求最大公约数

  int gcd(int a, int b) {

    if (b == 0)

      return a;

    

    return gcd(b, a % b);

  }

  // 约分

  void reduce() {

    int d = gcd(numerator, denominator);

    numerator /= d;

    denominator /= d;

  }

};

接下来,我们需要提供一些常用的运算符重载,例如加法、减法、乘法和除法。在C++中,我们可以使用运算符重载来实现这些运算符的重载,具体实现如下:


class Fraction {

public:

  Fraction(int a, int b) {

    numerator = a;

    denominator = b;

    reduce();

  }

  // 加法

  Fraction operator+(const Fraction& other) const {

    Fraction res(numerator * other.denominator + other.numerator * denominator, denominator * other.denominator);

    res.reduce();

    return res;

  }

  // 减法

  Fraction operator-(const Fraction& other) const {

    Fraction res(numerator * other.denominator - other.numerator * denominator, denominator * other.denominator);

    res.reduce();

    return res;

  }

  // 乘法

  Fraction operator*(const Fraction& other) const {

    Fraction res(numerator * other.numerator, denominator * other.denominator);

    res.reduce();

    return res;

  }

  // 除法

  Fraction operator/(const Fraction& other) const {

    Fraction res(numerator * other.denominator, denominator * other.numerator);

    res.reduce();

    return res;

  }

private:

  int numerator;  // 分子

  int denominator; // 分母

  // 辗转相除法求最大公约数

  int gcd(int a, int b) {

    if (b == 0)

      return a;

    

    return gcd(b, a % b);

  }

  // 约分

  void reduce() {

    int d = gcd(numerator, denominator);

    numerator /= d;

    denominator /= d;

  }

};

除此之外,我们还可以提供一些其他的方法,例如获取分子、分母、输出分数等,这些方法可以根据实际需求进行设计。


class Fraction {

public:

  Fraction(int a, int b) {

    numerator = a;

    denominator = b;

    reduce();

  }

  Fraction operator+(const Fraction& other) const {

    Fraction res(numerator * other.denominator + other.numerator * denominator, denominator * other.denominator);

    res.reduce();

    return res;

  }

  Fraction operator-(const Fraction& other) const {

    Fraction res(numerator * other.denominator - other.numerator * denominator, denominator * other.denominator);

    res.reduce();

    return res;

  }

  Fraction operator*(const Fraction& other) const {

    Fraction res(numerator * other.numerator, denominator * other.denominator);

    res.reduce();

    return res;

  }

  Fraction operator/(const Fraction& other) const {

    Fraction res(numerator * other.denominator, denominator * other.numerator);

    res.reduce();

    return res;

  }

  // 获取分子

  int getNumerator() const

    return numerator;

  

  // 获取分母

  int getDenominator() const

    return denominator;

  

  // 输出分数

  void print() const

    cout << numerator << "/" << denominator << endl;

  

private:

  int numerator;  // 分子

  int denominator; // 分母

  int gcd(int a, int b) {

    if (b == 0)

      return a;

    

    return gcd(b, a % b);

  }

  void reduce() {

    int d = gcd(numerator, denominator);

    numerator /= d;

    denominator /= d;

  }

};

最后,在使用分数类进行运算时,我们只需要使用重载后的运算符来进行即可。


Fraction a(1, 2);

Fraction b(2, 5);

Fraction c = a + b; // 分数相加

c.print();     // 输出分数

综上,C++实现分数类可以让我们更加方便地进行分数相关的运算和业务逻辑。在具体实现时,我们需要定义成员变量、运算符重载和其他常用方法,通过使用这些方法,我们可以更加方便地完成分数的计算和处理。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复