面试题答案
一键面试#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&
类型的引用,就可以支持链式调用。