通过重载左移运算符,可以实现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,重载左移运算符可以实现输出自定义数据类型。