a.编写一个重载的友元ostream插入运算符函数,该函数允许Fraction对象输出,并使用cout语句以num/denom形式出现。b.编写一个重载的友元流提取运算符函数,允许输入a/b形式的分数并将其分配给分数对象。写成一个程序
时间: 2024-03-03 08:50:20 浏览: 215
以下是实现上述要求的 C++ 代码:
```cpp
#include <iostream>
using namespace std;
class Fraction {
private:
int num; // 分子
int denom; // 分母
public:
Fraction(int n = 0, int d = 1) : num(n), denom(d) {}
friend ostream& operator<<(ostream& os, const Fraction& f); // 友元插入运算符重载
friend istream& operator>>(istream& is, Fraction& f); // 友元提取运算符重载
};
ostream& operator<<(ostream& os, const Fraction& f) {
os << f.num << "/" << f.denom;
return os;
}
istream& operator>>(istream& is, Fraction& f) {
char c;
is >> f.num >> c >> f.denom;
return is;
}
int main() {
Fraction f1(3, 4);
Fraction f2(5, 6);
Fraction f3;
cout << "f1 = " << f1 << endl;
cout << "f2 = " << f2 << endl;
cout << "Enter a fraction (e.g. 7/8): ";
cin >> f3;
cout << "f3 = " << f3 << endl;
return 0;
}
```
程序中定义了 `Fraction` 类,包含了分子和分母两个私有成员变量,以及一个构造函数。为了能够在输出流中输出 `Fraction` 对象,重载了 `operator<<` 友元插入运算符,将分数以 `num/denom` 的形式输出。同时,为了能够从输入流中读取 `a/b` 形式的分数并赋值给 `Fraction` 对象,重载了 `operator>>` 友元提取运算符。
在 `main` 函数中,分别创建了两个 `Fraction` 对象 `f1` 和 `f2`,并输出它们的值。随后,从标准输入流中读取一个分数赋值给 `f3`,并输出它的值。
阅读全文