this指针

1.this指针的引出

我们先来看以下代码:

class Test
{
public:
	void SetData(int data)
	{
		m_data = data;
	}
	int GetData()
	{
		return m_data;
	}
public:
	int m_data;
};

void main()
{
	Test t1, t2;
	t1.SetData(10);
	t2.SetData(20);
	cout << t1.GetData() << endl;
	cout << t2.GetData() << endl;
}
对于上述类,有这样的一个问题:
Test类中有SetDate与GetData两个成员函数,函数体中没有关于不同对象的区分,那当t1调用
SetDate函数时,该函数是如何知道应该设置t1对象,而不是设置t2对象呢?
我们通过引用 this指针 解决此问题,即:C++编译器给每个“ 非静态的成员函数“增加了一个隐藏的
指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操
作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自
动完成。
class Test
{
public:
	void SetData(int data)
	{
		this->m_data = data;
	}
	int GetData()
	{
		return this->m_data;
	}
public:
	int m_data;
};

void SetData(int data) 其原型就是void SetData(Test const *this,int data)

this指针是一个常指针,在成员函数内部不能修改this指向,this指针代表当前的对象,(谁来调用函
数,里面的this指针就是那个对象的地址),此时可以修改,this指针不能为空。
若this指针为空,我们来看
void SetData(int data)
{
 this=nullptr;
 m_data = data;
}

此时表示this指针谁都不代表,就会产生错误。

2.this 指针的特性
  1. this指针的类型:类类型* const。
2. 只能在“成员函数”的内部使用。
3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this 形参。所以对象中不存储this指针。
4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户传递。 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值