定义一个有理数类(num为分母、den为分子),并重载比较运算符 < ,比较两个有理数的大小。class Rational { public: Rational(int num=0, int den=1); int operator<(Rational r); private: long num; long den; } Rational a(2,3), b(3,4)
时间: 2023-12-18 10:02:14 浏览: 116
下面是定义有理数类并重载比较运算符 < 的代码:
```c++
#include <iostream>
using namespace std;
class Rational {
public:
Rational(int num=0, int den=1);
bool operator<(const Rational& r) const;
private:
long num;
long den;
};
Rational::Rational(int num, int den) {
if (den == 0) {
cout << "Error: denominator can not be zero!" << endl;
exit(1);
}
int sign = 1;
if (num < 0) { sign = -sign; num = -num; }
if (den < 0) { sign = -sign; den = -den; }
long d = gcd(num, den);
this->num = sign * (num / d);
this->den = den / d;
}
bool Rational::operator<(const Rational& r) const {
return num * r.den < den * r.num;
}
int main() {
Rational a(2, 3), b(3, 4);
if (a < b) {
cout << "a < b" << endl;
} else {
cout << "a >= b" << endl;
}
return 0;
}
```
其中,gcd 函数用于求两个整数的最大公因数:
```c++
long gcd(long a, long b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
```
注意,在比较运算符 < 中,我们使用 const 关键字来表示该函数不会修改类的成员变量。此外,我们还需要通过 & 来表示参数是一个常引用,以避免复制对象。
阅读全文