C++之返回*this的成员函数

     

#include <iostream>
#include <string>
using namespace std;
// typedef 别名
// 类可以自定义某种类型的类中的别名
class Screen {
public:
	// 隐藏Screen实现的细节,用户不知道Screen使用了一个string对象存放数据
	typedef string::size_type pos;

	Screen(string c) :
		contents(c) {
	}

	Screen &move(int c);

	// 重载函数
	Screen &set(char);
	Screen &set(pos, pos, char);
	Screen &display(ostream &os);
private:
	void do_display(ostream &os) const { os << contents; }
	pos cursor = 0, height = 0, width = 0;
	string contents;

};

//一般类的成员函数默认为内联函数,不需要显式声明
inline Screen &Screen::move(int c) {
	cursor = c;
	// 返回 *this 成员的函数
	return *this;
}

Screen &Screen::set(char c) {
	contents[cursor] = c;
	// 将 this 对象作为左值返回
	return *this;
}
Screen &Screen::display(ostream &os){
	do_display(os);
	// 将 this 对象作为左值返回
	return *this;
}

int main() {
	Screen mScreen("The program is running");
	mScreen.move(21).set('!').display(cout); //从左到右依次执行
	cout << endl;
	return 0;
}

        当我们set成员函数返回值调用set的对象的引用,返回引用的函数是左值的,意味着这些函数返回的是对象本身而不是副本,我们可以:

//将
mScreen.move(21).set('!').display(cout)//写成

mScreen.move(21);
mScreen.set('!');
mScreen.display(cout);
//这种形式

         一个const成员函数如果以引用的形式返回*this,那么它的返回类型将是个常量引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值