1、用于区分参数和成员变量同名的情况
比如下面这段代码中:
class Person
{
public:
Person& Person_age_add(Person & p)
{
this->m_age += p.m_age;
return *this;
}
//当需要返回对象的时候,我们通常是需要返回当前对象,可以通过return * this的方式,同时注意类应当是引用
Person(int m_age)
{
this->m_age = m_age; //this是指向调用该方法的对象的一个指针,这个是this 的第一个作用
}//当形参和成员变量名称相同的时候,可以用this指针进行区分
int m_age;
};
在定义构造函数时,参数和成员变量m_age重名了,如果不用this指针进行说明,编译器很难区分哪一个是参数,哪一个是成员变量的,但是This指针具有指向调用该方法的对象的作用,用this指针说明对象可以防止歧义。
2、用于返回对象
当我们定义了一个人对象p1,在调p1的某一个方法之后,我们希望返回的还是p1这个对象的本体(或者说是本身),那么应该怎么做呢?
需求:
1、定义一个人类,构造方法初始化年龄
2、定义一个成员函数,输入参数是一个对象,作用是将对象的年龄加到本体的年龄上面,返回调用该函数的对象。
3、以上的编程需求在于链式编程思想。
代码如下:
public:
Person& Person_age_add(Person & p)
{
this->m_age += p.m_age;
return *this;
}
这里需要说明两个点,this是指向调用该函数的对象的一个指针,对这个指针进行解引用是对象本身,返回的是没有内容的,及欲返回的是p1本身。
2、为什么要加引用,我们换一种思想,倘若不加引用,进行值的返回,那么编译器会另外开辟一块空间,完整的将p1的数据考本一份,那个空间就是你调用函数是想要接受的函数名,而我们的需求是返回的调用该方法的对象的本身。加了&之后再调用的过程为:
Person & q = * this //其中this 指向q1;
也就说,返回的还是q1本身,只不过换了个别的名称而已。
关于返回值要不要加引用的问题以及一些坑,后面不记得的话查一查黑马程序员的视频。