关于C++左移运算符重载,为什么我可以把cout改成out,改了之后下面调用还能用cout输出


#include <iostream>
using namespace std;
class Person
{
public:
    int m_A;
    int m_B;
    
};
ostream &operator<<(ostream &out,Person& p)
{
    out << "m_A=" << p.m_A << " m_B=" << p.m_B;
    return out;
}
void test01()
{
    Person p;
    p.m_A = 10;
    p.m_B = 10;
    cout << p << endl;
}
int main()
{
    test01();
    system("pause");
}

c++机制就是这样规定的,当你重载了自定义的类型的操作符<<,就意味着你可以使用cout输出自定义的类型。
假如这里你不实现ostream &operator<<(ostream &out,Person& p)这个函数,你就无法使用cout << p << endl;这句代码
另外你的out << "m_A=" << p.m_A << " m_B=" << p.m_B;可以随意更改成喜欢的形式,例如out << "m_A:" << p.m_A << " m_B:" << p.m_B;
c++通过这样的机制让我们可以更灵活的去实现自定义类型的输出,
ostream &out在这里是输出流,你可以简单了解,不用去深究,知道重载和怎么去写重载就够了,
传递的参数和返回的参数为什么是引用、以及我随便给你一个类型怎么去写重载<<运算符的函数,而且我们为什么常常会将这样的函数声明为friend 友元,这才是你该关注的

你那里自己写的函数。是自己定义的一个ostream对象。所以在函数里你可以那样写。这个只是局限于你的函数作用域里。下面那样写,是因为编译器里的ostream的输出对象只能是cout,你写cout<<就是相当于给你的重载里传俩个参数。然后调用函数而已

那个只是变量名,和实际传的变量是两个概念

这是参数名