42.this指针

this指针

指向当前对象实例的指针,该方法属于这个对象实例。


1.什么是this指针?

之前第36课中,我们已经学习了成员初始化列表(Member Initializer Lists),它可以帮助我们方便、快捷且在性能上有优势地初始化

class Entity {
public:
	int x, y;
	
	Entity(int x, int y)
		:x(x), y(y) {}
};

如果我想要在构造函数内部初始化,我要怎么写呢?这样吗?

Entity(int x, int y) {
    x = x;
    y = y;
}

显然,想也知道这是不可能的,我们肉眼都分不出来x是类中的成员变量还是参数。如果你在VS中使用的话可以看到,两个x都是参数的x。(这个其实类似于全局变量和函数参数,在同名的情况下会优先使用函数参数,更底层的原因还没学到)


那我们怎么引用这个类的成员x呢,这就是this

this是指向当前对象的指针

Entity(int x, int y) {
    this->x = x;
    this->y = y;
}


2.this的特性

this作为指向对象的指针,它有一些特性。

2.1this的类型

是类的指针,这里我定义的是Entity类,它就是Entity*。(在旧版本VS中,是const Entity*

2.2 const方法中的this

在第34讲中我们学习过,类的方法可以用const关键字,保证方法不会修改类成员变量

const方法中,this的类型会变成const Entity*。如果将this赋值给其他指针,同样要求指针是const Entity*,防止你使用this或与其值相同的指针修改指针指向的内容

注:const放在指针前是不允许修改指针指向的内容,在第34讲。

下面是一个例子,GetX()方法中你无法使用this或者与它相等的e去修改成员变量x

在这里插入图片描述



3.this的使用

3.1 用于调用实例本身

当类外部函数被类内部方法调用时,this可能会有用

比如:如果我们有一个打印Entity类的函数,我们想要在构造函数中调用。

void PrintEntity(Entity* e);

class Entity {
public:
	int x, y;

	Entity(int x, int y) {
		this->x = x;
		this->y = y;

		PrintEntity(this);
	}
};

像这时,我们就需要this指针指向对象实例


如果你是常量引用,那就写成解引用this即可(关于引用的知识在17讲)

void PrintEntity(const Entity& e);

class Entity {
public:
	int x, y;

	Entity(int x, int y) {
		this->x = x;
		this->y = y;

		PrintEntity(*this);
	}
};

3.2 delete this最好不要尝试的事

delete this会消灭你的对象,别这么干,短时间内碰不到可以使用的场景。



学习资料来源:https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb

欢迎大家关注视频原作者cherno,本文是我对其视频的学习笔记。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

去人777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值