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在左移运算符的右边,就会出现编译错误,所以左移运算符的重载只能用全局函数来实现

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<
	//其本质为
	//cout<
	//使用左移运算符重载可以简化自定义输出时,浪费代码行的代价,做到一口气全部输出自定义数据类型

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

c++,左移运算符的重载_第1张图片
这是左移运算符重载的使用和主要事项

你可能感兴趣的:(c++)