this指针

成员变量和成员函数分开存储

在C++中,类内的成员变量和成员函数分开存储

只有非静态成员变量才属于类的对象上

this指针_第1张图片

我们知道在C++中成员变量和成员函数是分开存储的

每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码

那么问题是:这一块代码是如何区分那个对象调用自己的呢?

c++通过提供特殊的对象指针,this指针,解决问题。this指针指向被调用的成员函数所属的对象

this指针是隐含每一个非静态成员函数内的一种指针

this指针的本质是一个指针常量,指针的指向不可修改

this指针的用途

当形参和成员变量同名时,可用this指针来区分。

此时在类的定义中应用,指向对象在类的非静态成员函数中,返回对象本身可使用return *this,返回对象本体this指针_第2张图片

属性里的age最好写成m_age(成员变量中的age

this指针_第3张图片

this指针_第4张图片

this指针_第5张图片

Person PersonAddPreson(Person &p)是创建了一个新对象

this指针_第6张图片

 this指针的特性总结

1. 只能在“成员函数”的内部使用。this指针指向当前对象,可以访问当前对象的所有成员变量。包括private、protected、public。
2. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。(只有创建对象后,this指针才有意义。

3.this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递。

4.static静态成员函数不能使用this指针。原因静态成员函数属于类,而不属于某个对象,所以static静态成员函数压根就没有this指针。

5.this在成员函数的开始执行前构造的,在成员函数的执行结束后清除。至于如何清除的,由编译器实现,程序员不关心。this是通过函数参数的首参数来传递的。

你可能感兴趣的:(C++,c++)