12.5.2 左移运算符重载

12.5.2 左移运算符重载

我们在输出一些内容时,用到的都是cout<<“asd”<<endl;这样的代码,这里的<<是左移运算符,也是一种特殊的函数:

  • 函数名称:<<
  • 形参:cout,[要输出的内容]
  • 返回值:cout

但是左移运算符只能输出int、string等数据类型,如果我们有一个person类的对象p,怎么实现cout<<p<<endl;这样的功能呢?
首先我们定义一个Person类:

class Person
{
public:
	Person(string name, int age) :m_Name(name), m_Age(age) {}
	string m_Name;
	int m_Age;
};

我们来尝试输出p,程序肯定报错:
在这里插入图片描述
因为系统不知道改怎么输出这个Person类。
然后我们来重载左移运算符:
首先调用左移运算符的函数原型是这样的:

	operator<<(cout, p);
	//也就是这样:
	cout << p;	//并且可以连续输出

那么根据上节介绍的知识,重载左移运算符时,函数形参是cout和p,返回值是cout。
我们转到cout的底层定义,发现cout是ostream类型的数据:
在这里插入图片描述
这样就可以仿照加号运算符重载的方式来重载左移运算符了:

ostream& operator<<(ostream& cout1, const Person &p)
{
	cout << p.m_Name << '\t' << p.m_Age;
	return cout1;
}

这里为了看得清晰,我把形参命名为cout1,其实直接命名为cout也行。
重载之后,main函数不再报错,且正常运行:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值