c++,左移运算符的重载

c++,运算符重载(左移运算符<<)

引言

在c++中,提供了运算符重载的方式,来让程序的可用性更强
这里,介绍一下左移运算符"<<"

左移运算符的重载可以帮助我们更好的输出自定义的数据类型,可以做到简洁,在不浪费更多代码行的情况下,使用函数,来输出类中的成员属性数据

上代码

这里我们先创建一个类
将成员属性设定为私有,当然设置为公共类型也可以,设置私有类型是为了展示当类内成员是私有时,要使用友元左移运算符重载函数来完成对类内成员的输出

class person
{
public:
	friend ostream& operator<<(ostream& cout, person& p);
	person()//这里使用构造函数来完成对成员属性的赋值
	{
		this->m_A = 10;
		this->m_B = 10;
	}

private:
	int m_A;
	int m_B;
};

那么,既然要输出成员属性,为什么不把左移运算符重载函数写在类内做成员函数呢,主要是因为若把左移运算符写在类内就会出现异常情况

ostream &operator<<(cout)

在调用对象时就会出现这样的情况
例如创建一个对象p

person p;

那么就会出现
p<<cout;
出现cout在左移运算符的右边,就会出现编译错误,所以左移运算符的重载只能用全局函数来实现

ostream& operator<<(ostream& cout, person& p)
{
	cout << "m_A=" << p.m_A << "  m_B=" << p.m_B;//此处不能加endl
	return cout;//只有返回一个cout,函数中才能使用endl进行链式编程
}

那么其中出现ostream是什么,ostream是cout的数据类型,属于标准输出流,如果要完成左移运算符的重载,必须设置返回值为标准输出流ostream

由于cout属于输出流ostream类型,所以返回值必须为ostream,加引用是为了确定全局只能有一个cout的对象

所以函数必须返回一个cout<<若不返回将无法进行cout<<的链式编程,以及endl换行

剩余代码
void test01()
{
	person p;
	cout << p << endl;
	//此处cout<<p<<endl;是左移运算符的函数重载的简化
	//其本质为
	//cout<<p.operator(cout,p)
	//使用左移运算符重载可以简化自定义输出时,浪费代码行的代价,做到一口气全部输出自定义数据类型

}
  
int main()
{
	test01();
	system("pause");
	return 0;
}
最后实现效果

在这里插入图片描述
这是左移运算符重载的使用和主要事项

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值