复数的输入输出运算符重载ptaC++
时间: 2025-05-21 11:41:37 浏览: 29
### 如何在 C++ 中重载复数的输入输出运算符
在 C++ 编程中,为了支持自定义类(如复数类 `Complex`)的数据输入和输出操作,可以通过重载输入运算符 `>>` 和输出运算符 `<<` 来实现。以下是具体的实现方式。
#### 定义复数类
首先需要定义一个表示复数的类 `Complex`,其中包含实部和虚部作为成员变量,并将其封装为私有属性以保护数据的安全性。
```cpp
class Complex {
private:
double real; // 实部
double imag; // 虚部
public:
// 构造函数
Complex(double r = 0.0, double i = 0.0) : real(r), imag(i) {}
// 获取实部
double getReal() const { return real; }
// 获取虚部
double getImag() const { return imag; }
// 设置实部
void setReal(double r) { real = r; }
// 设置虚部
void setImag(double i) { imag = i; }
// 声明友元函数以便访问私有成员
friend std::istream& operator>>(std::istream& in, Complex& c);
friend std::ostream& operator<<(std::ostream& out, const Complex& c);
};
```
#### 输出运算符重载
通过声明全局范围内的 `operator<<` 函数并设置其为 `Complex` 类的友元函数,可以直接访问类中的私有成员变量。这样可以在控制台或其他流设备上打印复数值。
```cpp
// 输出运算符重载
std::ostream& operator<<(std::ostream& out, const Complex& c) {
out << "(" << c.real;
if (c.imag >= 0)
out << "+";
out << c.imag << "i)";
return out;
}
```
#### 输入运算符重载
同样地,通过声明全局范围内的 `operator>>` 函数并设为 `Complex` 的友元函数,可以从标准输入或其他流读取复数值至对象实例中。
```cpp
// 输入运算符重载
std::istream& operator>>(std::istream& in, Complex& c) {
char ch1, ch2, ch3;
in >> ch1 >> c.real >> ch2 >> c.imag >> ch3;
if (!(ch1 == '(' && ch2 == '+' && ch3 == 'i' && ch3 == ')')) {
in.clear(std::ios::failbit); // 如果格式错误,则置失败标志位
}
return in;
}
```
以上代码片段展示了如何正确处理输入验证以及确保语法结构的一致性和准确性[^1]。
#### 测试程序
下面是一个简单的测试案例,演示了如何使用这些重载后的运算符:
```cpp
#include <iostream>
using namespace std;
int main() {
Complex c1(3.5, 4.8);
cout << "请输入一个复数:" << endl;
cin >> c1;
cout << "您输入的复数是:" << c1 << endl;
return 0;
}
```
当运行此程序时,它会提示用户输入一个复数形式 `(a+b*i)`,随后显示所输入的内容。
阅读全文
相关推荐


















