#include <iostream>
#include <cmath>
class Complex {
private:
double real;
double imag;
public:
Complex(double r = 0, double i = 0) : real(r), imag(i) {}
// 重载<<运算符用于输出复数
friend std::ostream& operator<<(std::ostream& os, const Complex& c) {
os << c.real;
if (c.imag >= 0) {
os << " + " << c.imag << "i";
} else {
os << " - " << -c.imag << "i";
}
return os;
}
// 重载>>运算符用于从输入流读取复数
friend std::istream& operator>>(std::istream& is, Complex& c) {
char ch1, ch2;
is >> c.real >> ch1 >> c.imag >> ch2;
if (ch1 != '+' || ch2 != 'i') {
is.setstate(std::ios::failbit);
}
return is;
}
// 类型转换函数将Complex对象转换为double类型(取复数的模)
operator double() const {
return std::sqrt(real * real + imag * imag);
}
};