1.this指针指向当前调用函数的对象
在上图的这个代码中,一个成员函数却有两个数据类型一样的对象在调用它,这个时候如何区分是那个对象在调用它呢,编译器中有一个隐含的This指针,当p1在调用函数的时候,那么This指针指向的就是p1这个对象,p2同理。我们最后是使用的p2调用的函数,现在This指针指向的对象就是p2,
this指针的作用,解决名称冲突的作用(形参和属性的名称冲突,这时候编译器会懵逼),解决方法就是使用this指针,这时候因为是p1在调用有参构造函数,所以现在this是指向p1,然后在将形参赋值给this.age,也就是p1.age,编译器就能识别出来前面的age是属性的age,而不会与后面的形参起冲突
2.this指针返回对象本身用*this的案例
注意,我们上面创建了一个ageAdd的函数,形参是一个引用p其数据类型为person,我们用p2来调用这个函数,所以当前this指向的对象是p2,下面直接使用this.age=this.age+p.age,意思就是将p2=p2+p1;
进阶,我们不仅要加一次,还要加两次或三次,那这里就出问题了,为什么呢,如果想要调用两三次的函数为p2.ageAdd(p1).ageAdd(p1).ageAdd(p1); ,这里我们p2调用了一次函数后上面的函数返回值是一个void,试问返回一个void在下面如何调用函数,所以我们得返回一个p2,但是不要直接返回一个p2,因为若直接返回一个p2就为值传递了,值传递是copy出一个新的副本,这时候的p2就不是原来的p2了,所以我们需要使用引用,引用是不改变值本身的,直接改了一个别名,地址没变,而且我们返回p2就用*this,因为现在是p2在调用这个函数,所以现在this指向的对象是p2.