其他分享
首页 > 其他分享> > 2.2this指针

2.2this指针

作者:互联网

标题:2.2this指针

通过2.1了解到c++成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。那么就有问题了:这一块代码如何区分是哪个对象在调用自己呢?

c答案:c++通过提供特殊的对象指针,this指针解决上诉问题。this指针指向被调用的成员函数所属的对象
怎么理解:
在这里插入图片描述
假设我们p1在调用函数,那么this就指向p1,同理p2,p3.

1.this指针是一种隐含在每一个非静态成员函数内的一种指针
2.this指针不需要直接定义,直接使用就可以了

this指针的用途:
1.当形参和成员变量同名时,可以用this指针来区分
2.在类的非静态成员函数中返回对象本身可以return *this,因为我们this指向的就是调用他的那个对象吧,我们解引用就是那个对象。

来讲解用途:
1.解决名称冲突:
在这里插入图片描述
这种代码直接报错,我们看三个阴影部分都是year,也就是编译器认为我们这三分year都是一样的,都是形参那个year;

如何解决
1:编码规范,不同名
2:this指针解决

#include <iostream>
using namespace std;
class person
{
public:
	person(int year)
	{
		this->year = year;
	}
	int year;
};
void test01()
{
	person p1(18);
	cout << "p1的年龄多少:" << p1.year;
}
int main()
{
	test01();
}

在这里插入图片描述
上面说了this指向访问他的那个东西,所以我们直接用->指向成员中的那个变量year,就和形参中的year区分开了。

返回对象本身
我们要引入我们的一个场景;设置两个数量,我们设置两个对象,将第一个对象的值加到第二个对象上面。

#include <iostream>
using namespace std;
class person
{
public:
	person(int number)
	{
		this->m_number = number;
	}
	int m_number;
	//第一个函数
	person& number_add1(person & p)
	{
		m_number += p.m_number;
		return *this;
	}
	//第二个函数
	person number_add2(person& p)
	{
		m_number += p.m_number;
		return *this;
	}
};

建议结合编译器将代码复制进去动手实际操作,我们这两个函数add1和add2有什么区别呢?直接观察我们可以看见add1返回的是person &类型,add2返回得使person类型

add1:
在这里插入图片描述
这里有我们的执行代码和我们的结果,我们可以很明显的看到我们p2的m_number变成了40.为什么能连续访问几次?为什么会这样?因为我们返回的是*this,也就是说我们又返回了一个p2的引用,所以我们又可以对这个进行操作,然后一直操作,我们就可以一直调用add1来进行加的操作

add2:
在这里插入图片描述
为什么这里我们就看到了p2中number的值是20?两次唯一的区别就是我们调用的函数的返回值不一样,我们看看我们的函数,add2中返回值是person类型的值。为什么返回的是person类型就不行了?

我们都知道,当返回是person类型的时候我们返回的 是一个拷贝的副本,所以我们下一次调用又在我们产生的副本上面进行调用add2函数,然后又返回这个*this,但是这个时候 * this已经变成副本的this指针了。但是当我们返回的是引用的时候我们就知道我们一直操作的是同一片内存空间(如果对引用不熟悉可以看看我以前的文章,里面对引用有详解)所以调用add1我们每次操作的都是同一片空间,调用add2我们每次操作的都是拷贝的引用。

留两个思考题如果能不通过编译器相出答案就说明理解的差不多了:

第一个题:

person p1(10);
person p2(10);
p2.number_add2(p2).number_add1(p1).number_add2(p1);
cout << "p2的值是:" << p2.m_number;

第二个题:

person p1(10);
person p2(10);
p2.number_add1(p1).number_add2(p2).number_add2(p1);
cout << "p2的值是:" << p2.m_number;

以上就是关于this指针的讲解部分,欢迎有问题的朋友在评论区留言,如果有错误欢迎指正。

标签:p2,add2,number,person,2.2,我们,指针
来源: https://blog.csdn.net/qq_52563729/article/details/116595586