this 指针的概念
C++中的成员变量和成员函数是分开存储的,每个非静态成员函数只会诞生一份函数实列,也就是说多个同类型的对象会公用一块代码。
问题:这一块代码是如何区分那个对象调用自己呢?
这就是this指针的作用
this 指针指向被调用的成员函数所属的对象
- 隐含在每个非静态成员函数内的指针
- 指针不需要定义,直接使用即可
用途
- 当形参和成员变量同名时,可以用this指针来区分
- 在类的非静态成员函数中返回对象本身,可以用
return *this
形参和成员变量同名时:
下图鼠标位于age上时,出现三个阴影,编译器认为这三个age是同一份和属性age不同。
此时输出结果错误
改进后:
this->age
在类的非静态成员函数中返回对象本身:
定义两个对象,将两个对象的年龄相加:
此时输出依然正确:
但是当再想加时编译器会报错:
这是因为返回值为void
,而如果此时返回的为p2
本身,那么可以进行追加:
改进代码如下:
注意:返回引用,会一直返回p2。
当用值的方式返回时,调用拷贝构造函数,为拷贝出来的新的p2: