#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<<就是相当于给你的重载里传俩个参数。然后调用函数而已
那个只是变量名,和实际传的变量是两个概念
这是参数名