运算符重载——左移运算符重载

目录:
应用场景:

可以输出自定义的数据类型信息

Person p("kll", "男")
cout << p << endl; // 可以输出对象p的所有属性(类似java中的toString)
左移运算符重载:

在上一篇算术运算符重载中介绍了,运算符重载可以在成员函数和全局函数中实现,但请注意左移运算符重载务必在全局函数中实现.

class Person {
public:
	string name;
	string sex;

	Person(string name, string sex) {
		this->name = name;
		this->sex = sex;
	}
};

//左移运算符重载
ostream& operator<< (ostream &cout, Person &p) {

	cout << "Name: " << p.name << "\n"
		<< "Sex: " << p.sex << endl;

	return cout;
}

void main() {
	Person p("kll", "男");

	// operator<<(cout, p);
	// 上面代码可以简化成以下
	cout << p << endl;// 此时就可以打印出该对象的信息了
}

下面来仔细看一下左移运算符重载的代码

ostream& operator<< (ostream &cout, Person &p) {

	cout << "Name: " << p.name << "\n"
		<< "Sex: " << p.sex << endl;

	return cout;
}

当在全局函数中实现上述代码后即可直接打印出对象的信息了,下面是模板,星号中间的内容根据需求改动

ostream& operator<< (ostream &cout, *对象的引用*) {

	cout << *根据你的需求打印出对象的信息* << endl;
	return cout;
	
}
代码优化:

在实际开发过程中,对象的属性都是私有的,这时我们用实现左移运算符重载的全局函数就无法直接访问到对象私有属性,从而无法打印出对象信息,这时该怎么办呢?

1)使用set和get方法
2)可以直接把这个实现左移运算符重载的全局函数声明为类的友元

class Person {

	friend ostream& operator<< (ostream& cout, Person& p);

public:
	Person(string name, string sex) {
		this->name = name;
		this->sex = sex;
	}

private:
	string name;
	string sex;
};

ostream& operator<< (ostream &cout, Person &p) {

	cout << "Name: " << p.name << "\n"
		<< "Sex: " << p.sex << endl;

	return cout;
}
小结:
  1. 实现左移运算符重载,你可以打印对象的信息
  2. 左移运算符重载必须在全局函数中实现
  3. 记住实现左移运算符重载的模板
  4. 最好把实现左移运算符重载的函数声明为类的友元
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值