指向当前对象的this指针

在讲this指针之前我们先引入一个问题:

#include<iostream>
using namespace std;
class Test
{
public:
	void SetData(int data)
	{
		m_data = data;
	}

private:
	int m_data;
};
int main()
{
	Test t1, t2;
	t1.SetData(10);
	t2.SetData(20);
}

从上面的代码来看,我们用一个类分别定义了两个不同的对象,在类中有一个设置数据成员的成员函数,当我们分比用不同的对象调用这个成员函数时,怎么能保证设置的是当前对象的数据成员呢?

答:在类中每一个成员函数都包含一个特殊的指针,这个指针就是this,它是指向当前对象的指针,它是作为函数的参数将当前对象的地址传递给成员函数的。因此这就保证了是对当前对象的数据成员在操作。

那this指针在哪里?

this指针是在每个成员函数的参数中,因为this指针是隐式使用的,我们没有必要再函数参数中增加this,也不用将对象的地址传给this,所以我们看不见。这些都是编译系统自动实现的。

 如下图所示,是将t1、t2的地址分别传给this指针

这里的this是常指针,不能改变this的指向,这就保证了this一直指向当前对象

#include<iostream>
using namespace std;
class Test
{
public:
	//void SetData(Test * const this,int data)
	void SetData(int data)
	{
		this->m_data = data;
	}

private:
	int m_data;
};
int main()
{
	Test t1, t2;
	t1.SetData(10);//SetData(&t1,10)
	t2.SetData(20);//SetData(&t2,10)
}

当数据成员和成员函数的参数同名时我们会看到下面这种情况,这是因为在SetData函数中他会将等式两边的data都认为是形参,当出了函数作用域两个都会被释放,因此t1、t2的data都是随机数。 

#include<iostream>
using namespace std;
class Test
{
public:
	
	void SetData(int data)
	{
		data = data;
	}

private:
	int data;
};
int main()
{
	Test t1, t2;
	t1.SetData(10);
	t2.SetData(20);
}

如果要解决这种问题我们可以:


	void SetData(int data)
	{
		this->data = data;
	}

但是我们在定义数据成员时最好还是有所区分/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘小小@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值