自引用指针this的详解

举报
努力变强的小C 发表于 2022/09/29 17:25:27 2022/09/29
【摘要】 自引用指针this的详解

目录


前言

this指针初识

this指针作用

 小结



前言

前面我们介绍了类和对象的基本概念和使用方法,下面我们将进一步对内核对象的其他方面进行交流和讨论,其中包括我们下面要讲的自引用指针this,通过对字引用指针字this的了解,

this指针初识

我们将进一步理解类和对象的使用方法和作用,当一个类他有若干个对象被定义后,系统就会为每一个对象,分配他们相应的存储空间,但是一个类包含的数据成一个成员,函数就要分别为这两个代码分配储存空间,按照一般的思路,如果一个类定义了三个对象,那么就应该分别为这三个对象的数据成员和成员函数的代码分配相应的储存空间,但是事实上确是给对象赋值的时候,就是给对象的数据成员赋值,但是不同对象的存储单元中所放的数据值通常来说就是不相同的,但是不同对象的函数代码又是相同的,所以说不管调用哪一个对象的成员函数其实调用的就是一模一样的代码,


this指针作用

所以C加加的编译系统就用了一段空间来存放这个相同的函数代码段,这就完美的解决这个问题,因为在每个对象乘以函数构造的时候都会去调用这个共用的函数代码,因此每个对象的存储空间都只是该对象数据成员所占用的储存空间,但是不包括成因函数代码所占用的空间 ,下面我们就来看一个栗子:

#include <iostream>
#include <string>
using namespace std;
class A {
	public:
		A(int a, int s);
		void show_score();
	private:
		int age, score;
};
A::A(int a, int s) {
	age = a;
	score = s;
}
void A::show_score() {
	cout << "this 指针值:" << this << "期末成绩:" << this->score << endl;
}
int main() {
	A a(18, 100);   // 创建对象
	A b(19, 99);
	A c(20, 98);
	a.show_score();
	b.show_score();
	c.show_score();
	return 0;
}

输出结果:

this 指针值:0000002A26BDFCC8期末成绩:100
this 指针值:0000002A26BDFCE8期末成绩:99
this 指针值:0000002A26BDFD08期末成绩:98

 小结

上面这个例子中,是C++为成员函数提供了一个名字为this的指针,而且这个指针称为自引用指针,就是说每当创建一个新的对象的时候,系统就会默认把this指针初始化,并自动指向对象所以说每当调用一个成员函数时。系统就会自动把this指针当做一个隐含的参数,传给该函数

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。