重载左移运算符(<<)用于输出自定义对象的成员变量,在实际开发中很有价值(调试和日志)
只能使用非成员函数版本
如果要输出对象的私有成员,可以配合友元一起使用。
试一下用cout直接输出超女对象 CGirl g; cout<<g<<endl
; 会报错,没有与操作数匹配的运算符,cout 不支持超女类这种数据类型如果想让cout支持超女类这种数据类型就需要在超女类中重载左移运算符
#include<iostream>
using namespace std;
class CGirl
{
friend ostream &operator <<(ostream& cout,const CGirl& g);
string m_name;
int m_xw;
int m_score;
public:
CGirl()
{
m_name="西施";
m_xw=87;
m_score=30;
}
void show(){
cout<<"姓名"<<m_name<<",胸围:"<<m_xw<<",评分:"<<m_score<<endl;
}
};
ostream &operator <<(ostream& cout,const CGirl& g) //第一个形参是ostream的引用,形参名用cout也行,其他的也可以
{
cout<<"姓名:"<<g.m_name<<",胸围"<<g.m_xw<<",评分:"<<g.m_score;
}
int main()
{
CGirl g;
cout<<g<<endl;
}
左移运算符的重载只能使用全局函数的方式,不能使用成员函数
如果使用成员函数函数只能这样写
ostream &operator <<(ostream& cout)
{
cout<<"姓名:"<<this->m_name<<",胸围"<<thiis->m_xw<<",评分:"<<this->m_score;
}
第一个形参是超女对象,第二个形参是cout ,那么意味着cout要写在对象的右边
int main()
{
CGirl g;
g<<cout<<endl;
}
但是cout在对象的右边不是我们想要的结果,所以左移运算符的重载只能用全局函数的方法不能使用成员函数