MST

星途 面试题库

面试题:C++ 流运算符重载与类型转换及链式调用

定义一个 `Complex` 类表示复数,有实部和虚部两个成员变量。要求重载 `<<` 运算符实现复数的输出,格式如 "3 + 4i"。同时,重载 `>>` 运算符实现从输入流读取复数,输入格式也为 "3 + 4i"。此外,添加类型转换函数将 `Complex` 对象转换为 `double` 类型(取复数的模)。并且,要求重载的流运算符支持链式调用,例如 `cout << Complex(1, 2) << Complex(3, 4);` 能正常输出两个复数。请实现该 `Complex` 类及其相关运算符重载和类型转换函数。
18.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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);
    }
};