作用:可以输出自定义数据类型
我们正常情况下无法输出自定义数据类型。这个时候就需要重载<<运算符

成员函数只有一个参数
1.通常不会用成员函数重载左移运算符,首先如果这么写:void operator<<(Perosn &p),这是错误的,cout哪去了呢。
2.而void operator<<(cout),调用时(本质:p.operator<<(cout))会变成p<

可以看到cout属于ostream类,也就是输出流对象

// 本质 operator<<(cout,p),简化cout<重载运算符还可以和友元相结合
#include
using namespace std;
#include
// 左移运算符重载
// 作用:可以输出自定义数据类型
class Person {
// 友元,目的是让重载<<运算符的函数也可打印Person中的私有属性
friend ostream& operator<<(ostream& cout, Person& p);
friend void test01();
private:
int m_A;
int m_B;
// 通常不会用成员函数重载左移运算符,因为不需要p.operator<<(p);这是错误的
// 而void operator<<(cout),会变成p< 
总结:1.重载左移运算符配合友元可以实现输出自定义数据类型
2.只能通过全局函数重载左移运算符
3.cout属于ostream类,并且重载函数必须传入的是cout的引用,返回的也必须是引用。→
ostream &(ostream &cout,Person p)。这样可以实现输出时无限追加内容。