请给出复数类重载流的插入符和提取符的例子
时间: 2024-02-29 15:51:24 浏览: 14
下面是一个复数类的例子,其中重载了流的插入符和提取符:
```cpp
class Complex {
private:
double real;
double imag;
public:
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
friend ostream& operator<<(ostream& os, const Complex& c) {
os << c.real << (c.imag > 0 ? "+" : "") << c.imag << "i";
return os;
}
friend istream& operator>>(istream& is, Complex& c) {
char op;
is >> c.real >> op >> c.imag;
if (op == '-') {
c.imag = -c.imag;
}
return is;
}
};
```
在这个例子中,Complex类重载了流的插入符`<<`和提取符`>>`。在插入符的实现中,使用流输出对象os输出real和imag成员变量的值,并根据imag的符号判断是否需要输出加号。在提取符的实现中,使用流输入对象is依次读取real、op和imag,并根据op的值判断是否需要将imag取负。
使用这个复数类的插入符和提取符,可以像下面这样进行输入输出:
```cpp
Complex c1(1.2, 3.4);
cout << c1 << endl; // 输出:1.2+3.4i
Complex c2;
cin >> c2;
cout << c2 << endl; // 输入:3.2-4.6i,输出:3.2-4.6i
```
这里的输入输出形式与常规的复数表示形式稍有不同,但是可以根据需要进行修改。