通过重载左移运算符,可以实现cout << p;直接输出类对象的各个属性。
其只能使用全局函数重载。
注意cout的定义如下:
_EXPORT_STD extern "C++" __PURE_APPDOMAIN_GLOBAL _CRTDATA2_IMPORT ostream cout;
也就是说我们一直用来输出的cout是ostream类对象。
因此左移运算符重载方式为:
ostream& operator<<(ostream& out, Person& p)
{
out << "a: " << p.m_A << " b: " << p.m_B;
return out;//返回osteam对象,可以接着<<输出套娃
}
代码示例如下:
#include<iostream>
using namespace std;
//只能使用全局函数重载
//cout << p; 直接输出对象
class Person
{
friend ostream& operator<<(ostream& out, Person& p);//梦幻联动友元
public://一定要public,不然类外不能初始化
Person(int a, int b)
{
this->m_A = a;
this->m_B = b;
}
private:
int m_A;
int m_B;
};
ostream& operator<<(ostream& out, Person& p)
{
out << "a: " << p.m_A << " b: " << p.m_B;
return out;//返回osteam对象,可以接着<<输出套娃
}
void test()
{
Person p(10, 20);
cout << p << " 这是套娃" << endl;
}
int main() {
test();
}
运行结果如下:
可以看到cout << p确实可以直接输出其属性值。
总结:配合友元运算符friend,重载左移运算符可以实现输出自定义数据类型。