MST

星途 面试题库

面试题:C++ 流运算符非成员函数重载实现

假设你有一个自定义类 `MyClass`,包含一个 `int` 类型的成员变量 `data`。请使用非成员函数重载 `<<` 运算符,实现将 `MyClass` 对象的 `data` 成员输出到标准输出流。同时说明在这种重载方式下,如何处理链式调用的问题。
30.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class MyClass {
public:
    int data;
    MyClass(int d) : data(d) {}
};

std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
    os << obj.data;
    return os;
}

在这种重载方式下,<< 运算符函数返回一个 std::ostream& 类型的引用,即输出流对象本身。这样,当进行链式调用时,每次调用 << 运算符函数返回的都是同一个输出流对象的引用,从而可以继续调用下一个 << 运算符函数。例如:

MyClass obj(42);
std::cout << obj << " is the data" << std::endl;

这里先调用 operator<<(std::cout, obj),返回 std::cout 的引用,然后可以继续在这个引用上调用 operator<< 输出字符串 " is the data" 和换行符。所以,只要重载的 << 运算符函数返回 std::ostream& 类型的引用,就可以支持链式调用。