详解c++的this指针

C++类中this指针的理解

先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。用这个类型可以来声明一个变量,比如int x, class my等等。这样就像变量x具有int类型一样,变量my具有class类型。理解了这个,就好解释this了,my里的this 就是指向my的指针。如果还有一个变量class mzmzthis就是指向mz的指针。 这样就很容易理解this 的类型应该是class *,而对其的解引用*this就应该是一个class类型的变量。

 

1. this指针的用处:

一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果

this作用域是在类内部当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。例如,调用date.SetMonth(9) <===> SetMonth(&date, 9)this帮助完成了这一转换 .

在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无需通过成员访问运算符来做到这一点,因为this所指的正是这个对象。任何对类成员的直接访问都被看成this的隐式使用

this的目的总是指向这个对象,所以this是一个常量指针,我们不允许改变this中保存的地址。

 

2. this指针的使用:

一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。这是因为当函数参数与成员变量相同时,函数参数这个局部变量会将全局变量的成员变量给屏蔽掉,那么,你以为的对成员变量的赋值,其实是在对函数的局部变量的赋值,局部变量会随函数的执行完毕而会被自动清除,而在这个过程当中,成员变量并没有发生任何改变。

 

4. 关于this指针的一个精典回答:

当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。

对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身。

 

5this指针只能在成员函数中使用,全局函数和静态函数(static修饰的函数)都不能使用this指针。实际上,成员函数默认的第一个参数是 T * const this(能够看出this指针是一个常量指针,因为它被const所修饰,永远只指向实列本身)

This指针在成员函数前开始构造,在成员函数结束后开始清除。这个生命周期同任何一个函数参数是一样的,没有任何区别。

猜你喜欢

转载自blog.csdn.net/leikun153/article/details/80427359