写c++代码。定义一个有理数类,重载比较运算符。写一个完整的程序,进行数据成员的设置和输出。 class rational { private: long denom,den; //denom为分子,den为分母 public: //构造函数 int operator<(rational r) const; int operator<=(rational r) const; int operator==(rational r) const; int operator!=(rational r) const; //这里增加赋值和读出函数 }
时间: 2023-11-22 12:56:38 浏览: 122
有理数_有理数类Rational_
下面是一个完整的有理数类的实现,包括比较运算符的重载、构造函数和成员函数的定义:
```cpp
#include <iostream>
using namespace std;
class rational {
private:
long denom, den; //denom为分子,den为分母
public:
//构造函数
rational(long num, long den) {
if (den == 0) {
cout << "分母不能为0" << endl;
exit(1);
}
this->denom = num;
this->den = den;
reduce();
}
//重载比较运算符
int operator<(rational r) const {
return this->denom * r.den < r.denom * this->den;
}
int operator<=(rational r) const {
return this->denom * r.den <= r.denom * this->den;
}
int operator==(rational r) const {
return this->denom * r.den == r.denom * this->den;
}
int operator!=(rational r) const {
return this->denom * r.den != r.denom * this->den;
}
//赋值函数
void set(long num, long den) {
if (den == 0) {
cout << "分母不能为0" << endl;
exit(1);
}
this->denom = num;
this->den = den;
reduce();
}
//读出函数
void output() const {
cout << this->denom << "/" << this->den << endl;
}
private:
//约分函数
void reduce() {
long g = gcd(this->denom, this->den);
if (g != 1) {
this->denom /= g;
this->den /= g;
}
}
//求最大公约数
long gcd(long a, long b) const {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
};
int main() {
rational r1(4, 6);
rational r2(2, 3);
r1.output(); //输出 2/3
r2.output(); //输出 2/3
if (r1 == r2) {
cout << "相等" << endl;
} else {
cout << "不相等" << endl;
}
return 0;
}
```
在这个程序中,我们定义了一个有理数类 `rational`,它有两个私有数据成员 `denom` 和 `den`,它们分别表示有理数的分子和分母。
我们提供了一个构造函数,可以用来初始化有理数对象。在构造函数中,我们检查了分母是否为0,如果是,则输出错误信息并退出程序。
我们还重载了比较运算符 `<`、`<=`、`==` 和 `!=`,可以用来比较两个有理数对象的大小关系。
最后,我们还提供了一个赋值函数 `set` 和一个读出函数 `output`,可以用来设置和输出有理数对象的值。
在 `main` 函数中,我们创建了两个有理数对象 `r1` 和 `r2`,分别表示 4/6 和 2/3。然后我们输出它们的值,并比较它们是否相等。
阅读全文