已知class Rational封装了分子和分母,用来表示有理数。按照全局函数的方式重载了<<运算符,并声明为友元函数。按照以下的原则输出有理数:①如果是负数(分子小于零)则外面有一对();②如果为整数,则不输出分数线和分母。请你补充下面的代码。 注意:编号相同的空内容也一样、所有空均无空格、半角符号、区分大小写。 class Rational { friend ostream& operator<<(ostream& o, const Rational& r); private: int n; // 分子 int d; // 分母 }; ostream& operator<<(ostream& o, const Rational& r) { if (____①____) cout << "("; cout << r.n; if (____②____) cout << "/" << r.d; if (____①____) cout << ")"; return ____③____; }
时间: 2024-02-22 12:58:14 浏览: 111
以下是代码实现:
```c++
class Rational {
friend ostream& operator<<(ostream& o, const Rational& r);
private:
int n; // 分子
int d; // 分母
};
ostream& operator<<(ostream& o, const Rational& r) {
if (r.n < 0) o << "(";
if (r.n % r.d == 0) {
o << r.n / r.d;
} else if (r.n > 0 && r.n < r.d) {
o << r.n << "/" << r.d;
} else {
int integer = r.n / r.d;
int numerator = r.n - integer * r.d;
int denominator = r.d;
o << integer << " " << abs(numerator) << "/" << denominator;
}
if (r.n < 0) o << ")";
return o;
}
```
在类 `Rational` 中,重载了全局函数 `operator<<` 作为输出运算符。在输出运算符中,首先判断分子是否小于零,如果小于零则输出一对括号。
然后判断是否为整数,如果是,则直接输出分子;如果不是,则判断是否为真分数或假分数。如果为真分数,则输出分子和分母;如果为假分数,则先输出整数部分,再输出分数部分的分子和分母。
最后,如果分子小于零,则在末尾输出一对括号。
阅读全文