C++中为什么存在this指针?

在这篇文章中 初识类和对象,谈到了类的初步认识和基本操作方法。

成员函数存储在公共的代码段,不同的对象调用成员函数时候,那么编译器如何知道具体操作的是哪一个对象呢?
在这里就引出了this指针。

C++编译器给每个 “非静态的成员函数” 增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过这个指针来完成的。只不过所有的操作对用户来说都是透明的,不需要用户来传递,编译器自动完成。
 
 
 
this指针特性:

  1. 只能在“成员函数”中使用
  2. this指针类型: 类类型 *const (加const是为了保证,指针的指向不被更改)
  3. this指针不存储在对象中,不影响对象大小,且始终指向当前对象
  4. this指针是“成员函数”的第一个隐藏参数,由编译器自动给出
  5. 主要是通过ecx寄存器来传递(并不是所有的)

例:

class Student
{
private:
	char _name[20];
	char _sex[5];
	int _age;
public:
	void StudentInit(const char *name, const char *sex, int age);
	void Print();
};

其操作方法:
在这里插入图片描述
其最后的输出都是一样的,因为this为隐藏指针,编译器会自动加上。
在这里插入图片描述
 
 
 
this指针可以为空嘛?

  1. 当以对象调用成员函数时,this指针不可能为空。
  2. 当以指针ptr调用成员函数时,是将ptr作为参数传递给this指针,若ptr为空,那么this指针就为nullptr
  3. this指针为空,成员函数可以正常调用。但若是成员函数访问了成员变量或者调用了有成员变量的成员函数,程序会崩溃。

 
 
 
成员变量相当于成员函数的全局变量。

但是成员变量在后,成员变量的使用在前,编译器为什么不报错呢?

编译器处理类的方法:

  1. 识别类名
  2. 识别成员变量
  3. 识别成员函数,并对函数进行修改----增加this指针
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值