MST

星途 面试题库

面试题:C++运算符重载三种方式之友元函数重载运算符的综合应用

定义一个复数类Complex,包含实部和虚部两个double类型成员变量。请使用友元函数的方式重载C++中的减法运算符(-)和输出运算符(<<)。减法运算符实现两个复数相减并返回新的复数对象;输出运算符以 (实部, 虚部) 的格式输出复数。同时编写测试代码验证这两个重载运算符的功能。
23.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class Complex {
private:
    double real;
    double imag;
public:
    Complex(double r = 0, double i = 0) : real(r), imag(i) {}

    // 友元函数声明
    friend Complex operator-(const Complex& a, const Complex& b);
    friend std::ostream& operator<<(std::ostream& os, const Complex& c);
};

// 减法运算符重载
Complex operator-(const Complex& a, const Complex& b) {
    return Complex(a.real - b.real, a.imag - b.imag);
}

// 输出运算符重载
std::ostream& operator<<(std::ostream& os, const Complex& c) {
    os << "(" << c.real << ", " << c.imag << ")";
    return os;
}

// 测试代码
int main() {
    Complex c1(3.0, 2.0);
    Complex c2(1.0, 4.0);

    Complex result = c1 - c2;
    std::cout << "c1 - c2 = " << result << std::endl;

    return 0;
}
  1. 类定义
    • Complex类包含两个double类型的私有成员变量real(实部)和imag(虚部)。
    • 构造函数用于初始化复数的实部和虚部,默认值为0。
  2. 友元函数声明
    • friend Complex operator-(const Complex& a, const Complex& b);声明减法运算符重载的友元函数。
    • friend std::ostream& operator<<(std::ostream& os, const Complex& c);声明输出运算符重载的友元函数。
  3. 减法运算符重载
    • operator-函数实现两个复数相减,返回一个新的Complex对象,其实部和虚部分别是两个操作数实部和虚部相减的结果。
  4. 输出运算符重载
    • operator<<函数将复数以(实部, 虚部)的格式输出到流os中,并返回该流对象。
  5. 测试代码
    • main函数中创建两个Complex对象c1c2
    • 执行c1 - c2操作并将结果存储在result中。
    • 使用重载的输出运算符输出c1 - c2的结果。