有理数类的实现 c++
时间: 2023-12-14 11:28:24 浏览: 52
以下是一个简单的有理数类的实现示例,使用C++语言:
```c++
#include <iostream>
using namespace std;
class Rational {
private:
int numerator;
int denominator;
public:
Rational() {
numerator = 0;
denominator = 1;
}
Rational(int num, int den) {
int gcd = getGCD(num, den);
numerator = num / gcd;
denominator = den / gcd;
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
int getNumerator() const {
return numerator;
}
int getDenominator() const {
return denominator;
}
Rational operator+(const Rational& r) const {
int num = numerator * r.denominator + r.numerator * denominator;
int den = denominator * r.denominator;
return Rational(num, den);
}
Rational operator-(const Rational& r) const {
int num = numerator * r.denominator - r.numerator * denominator;
int den = denominator * r.denominator;
return Rational(num, den);
}
Rational operator*(const Rational& r) const {
int num = numerator * r.numerator;
int den = denominator * r.denominator;
return Rational(num, den);
}
Rational operator/(const Rational& r) const {
int num = numerator * r.denominator;
int den = denominator * r.numerator;
return Rational(num, den);
}
bool operator==(const Rational& r) const {
return numerator == r.numerator && denominator == r.denominator;
}
bool operator!=(const Rational& r) const {
return !(*this == r);
}
friend ostream& operator<<(ostream& os, const Rational& r) {
os << r.numerator << "/" << r.denominator;
return os;
}
private:
int getGCD(int a, int b) const {
return b == 0 ? a : getGCD(b, a % b);
}
};
int main() {
Rational r1(2, 3);
Rational r2(1, 2);
Rational r3 = r1 + r2;
Rational r4 = r1 - r2;
Rational r5 = r1 * r2;
Rational r6 = r1 / r2;
bool b1 = r1 == r2;
bool b2 = r1 != r2;
cout << "r1 = " << r1 << endl;
cout << "r2 = " << r2 << endl;
cout << "r1 + r2 = " << r3 << endl;
cout << "r1 - r2 = " << r4 << endl;
cout << "r1 * r2 = " << r5 << endl;
cout << "r1 / r2 = " << r6 << endl;
cout << "r1 == r2 ? " << b1 << endl;
cout << "r1 != r2 ? " << b2 << endl;
return 0;
}
```
该实现定义了一个Rational类,包含了有理数的分子和分母,并提供了加、减、乘、除、相等、不相等等基本运算符的重载。在构造函数中,通过求分子分母的最大公约数来进行约分,同时将分母保持正数。在输出运算符的重载函数中,将分子和分母以“分子/分母”的形式输出。在主函数中,展示了该有理数类的基本使用方法,包括创建有理数对象、进行数学运算、比较运算等,并输出对应的结果。