--->可以输出(cout)自定义的数据类型
//左移运算符重载
#include <iostream>
using namespace std;
class Person
{
public:
int m_A;
int m_B;
};
//把cout和p作为实参后,调用operator<<函数
//cout为标准输出流
ostream& operator<<(ostream& cout,Person& p)//全局函数
{
cout << "m_A=" << p.m_A <<"m_B=" << p.m_B << endl;
return cout;
}
//用ostream& 是因为iostream的拷贝构造函数不允许使用
void test01()
{
Person p;
p.m_A = 10;
p.m_B = 20;
cout << p << endl;//本质为operator(cout,p)-->简化为cout<<p
}
int main()
{
test01();
return 0;
}
--->写法2:引用(引用的本质是起别名)
ostream& operator<<(ostream& out,Person& p)//全局函数
{
out << "m_A=" << p.m_A <<"m_B=" << p.m_B << endl;
return out;
}
传参时相当于ostream& out=cout
--->当数据成员为私有时,可以用友元和构造函数解决
#include <iostream>
using namespace std;
class Person
{
friend ostream& operator<<(ostream& cout, Person& p);//友元,使该函数能够访问数据成员
public:
Person(int a, int b)//构造函数,方便传入参数
{
m_A = a;
m_B = b;
}
private:
int m_A;
int m_B;
};
ostream& operator<<(ostream& cout, Person& p)//重载左移运算符
{
cout << "m_A=" << p.m_A << "m_B=" << p.m_B << endl;
return cout;
}
void test02()
{
Person p(10, 89);
cout << p << endl;
}
int main()
{
test02();
return 0;
}