this指针

this指针:

 

主要作用:

一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也即,即使没写this指针,编译器在编译的时候也会加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。

eg:   date.SetMonth(9)<==>SetMonth(&date,9),this指针帮助完成这一转换。

 

如何使用:

                            情况1.在类的非静态成员函数中返回类对象本身的时候,直接使用return *this

                            情况2.当参数与成员变量名相同时使用this指针,eg: this->n=n;(不能写成n=n)

 

使用示例:

                            This指针是类的一个自动生成,自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。

 

关于this指针的一个经典回答:

当你进一个房子后,

你可以看见桌子,椅子,地板等,

但是你看不到房子的全貌。

对于一个类的实例来说,

你可以看到它的成员函数,成员变量,

但是实例本身呢?

this是一个指针,它时时刻刻指向你这个实例本身

 

注意:

1.      this只能在成员函数中使用,全局函数,静态函数都不能使用。

2.      this在成员函数的开始时构造,在成员的结束后清除。

 

Question:

1.      this指针什么时候创建?

This在非静态成员中有意义,作为右值可以直接在编译时确定其存在,运行时无所谓创建。

2.      this指针存放在何处?堆,栈,全局变量,还是其他?

由上一问可知,this指针无需显式存储在内存中,只要存储对象的内存位置确定,对应的this指针就被确定了。

3.      this指针如何传递给类中函数的?绑定?还是在函数参数的首参数就是this指针。那么this指针又是如何找到类实例后的函数的?

This是通过函数参数的首参数来传递的,this指针是在调用之前生成的。类在实例化时,只分配类中的变量空间,并没有为函数分配空间。自从来的函数定义完成后,它就在那里

4.      this指针是如何访问类中变量的?

如果不是类,而是结构的话,那么,如何通过结构指针来访问结构中的变量呢?

5.      我们只有获得一个对象后,才能通过对象使用this指针,如果我们知道一个对象this指针的位置可以直接使用么?

This指针只有在非静态成员中才有意义,获得一个对象后,不需要在类外部使用this对其操作。应当注意this是一个右值,不存在所谓的this的位置,只是this表示了对象的存储位置而已。&this违反语义规则,编译无法通过。

6.      每个类编译后,是否创建一个类中函数表来保存函数指针,以便来调用函数?

一般来说,对于类成员函数(不论是静态还是非静态的成员函数)都不需要创建一个在运行时的函数表来保存,只有虚函数才会被放到函数表中。但是,即使是虚函数,如果编译器能明确知道调用的是哪个函数,编译器就不会通过函数表中的指针来间接调用,而是可以直接调用该函数

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值