一文让你透彻理解 C++中的this指针

1 为什么需要this 指针?
现在我们封装了一个类,这个类里有成员变量,也有成员函数。现在我们用类来实例化一个对象。现在我们实例化出来的对象要调用类中的成员函数,但是,我们的实例化该怎么去调用访问函数呢? C++ 中每个成员函数的参数中都有一个指针形参,这个指针形参就是this指针,我们的实例化对象在调用成员函数的时候,将自己的地址作为实参,拷贝一份传给成员函数中的this指针,然后,实例化对象就可以访问成员函数。

举个例子: 程序员小吴,在某国内互联网公司九九六20年后,攒够2000万,准备去要去买房,到售楼部,房产销售给他推荐了一个800 平米的精装房,房子现在没有盖,但是设计图纸,动态图(类)已经可以看了. 通过这个图,他可以看到里面的大沙发,茶几,电视.厨房(类中成员函数和成员变量),现在这个房子只是镜中花水中月,看得见,摸不着,两年以后,800 平米的房子改好了(实例化对象),现在我他搬进去,可是,他没有钥匙,进不去,于是他去找房地产公司,他们就给了小吴房子的钥匙(this指针),于是小吴就可以搬进去了,小吴就可以使用里面的沙发、床、厨房、厕所等,于是我们的程序员小吴从此过上了幸福的生活。

2 this指针是什么?
this指针是一个类中成员函数中的一个指针形参,对象调用成员函数时,将对象地址作为实参传递给this 形参
以下两段代码等价

class student {
public :
   void InitStudent(char* name, char* gender, int age)
{
	strcpy(_name, name);
	strcpy(_gender, gender);
	_age = age;
}
private:
	char _name[20];
	char _gender[3];
	int _age;
}
int main {
student s1  s2;
s1.InitStudent();
s2.InitStudent();
return 0;
}
class student {
public :
//  this指针是一个类 student 中成员函数中的一个指针形参
//  对象s1、s2调用成员函数时,将对象地址作为实参传递给this 形参,从而实现对成员函数的调用
   void InitStudent(Student* this, char* name, char* gender, int age)
{
	strcpy(this_name, name);
	strcpy(this_gender, gender);
	_age = age;
}
private:
	char _name[20];
	char _gender[3];
	int _age;
}
int main {
student s1  s2;
s1.InitStudent();
s2.InitStudent();
return 0;
}

3 类比C语言中的结构体知识再来理解this指针
首先我们定义一个学生的结构体,然后定义该结构体类型的结构体指针,然后我们在访问结构体中的成员时 可以通过该结构体类型指针访问该结构体成员。
代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include<string.h>

typedef struct  student{
	char _name[20];
	char _gender[3];
	int _age;
}student,   *pstu;//    给结构体类型student 取别名为 student ,给结构体指针类型student*  取别名为pstu

void InitStudent( pstu  ps,char* name, char* gender, int age)
{
	strcpy(ps->_name, name);
	strcpy(ps->_gender, gender);
	ps->_age = age;
}

void print(pstu  ps){
	printf("%s %s %d\n", ps->_name, ps->_gender, ps->_age);
}
int main(){
	student s1,  s2;
	InitStudent(&s1, "yang zhen ning", "male", 82);
	InitStudent(&s2, "wen fan", "female", 28);

	print(&s1);
	print(&s2);
	system("pause");
	return 0;
}


4 this指针的特性

  1. this指针的类型:类类型* const (this指针的指向不可被修改)
  2. 只能在“成员函数”的内部使用
  3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this 形参。所以对象中不存储this指针。
  4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户 传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值