C++类中this指针的说明

this指针

1.说明:当程序中一个类定义了多个对象,多个对象都调用类中同一个成员函数时,此时怎么区别这个成员函数在哪个对象上操作,C++提供了this指针。如:

class Data
{
public:
	void SetData(int year,int month,int day)
	{
		_year=year;
		_month=month;
		_day=day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Data d1,d2;
	d1.SetData(2016,9,25);
	d2.SetData(2016,9,25);
	return 0;
}
创建两个Data类对象d1,d2,都调用成员函数SetData()函数,此时它是在那一个对象上操作,this指针发生作用。

2.定义:每个类的成员函数都默认隐含定义了一个指针,当创建一个类对象并用对象调用成员函数时,这个指针就被初始化为这个对象的地址,使它指向调用函数的对象,这个指针被称为this指针。即如上段代码Data类中成员函数SetData(),它会在识别类时编译器对其进行改写,变为:

void SetDate(Date* const this, int year, int month, int day)
	{
	        this->_year = year;
		this->_month = month;
		this->_day = day;
	}


上述出现this指针即默认隐含的指针,在对象d1调用下,this指针存放的地址与d1的地址相同,所以其在不同情况下分别指向d1、d2两个对象地址。而这个成员函数实现方式与C语言中结构体实现方式相同,如:

struct Date
{
	int _year;
	int _month;
	int _day;
};
void SetDate(<span style="color:#ff0000;">Date* _this</span>, int year, int month, int day)
{
	_this->_year = year;
	_this->_month = month;
	_this->_day = day;
}
int main()
{
	Date d1;
	SetDate(<span style="color:#ff0000;">&d1</span>, 2016, 9, 26);
	return 0;
}
上述代码创建结构体对象d1,在函数中传人d1地址,用_this指针接收,所以这两种实现方法是相同的。

由上也可总结出this指针—

3.特性:

(1)类型:类类型 *const(常量指针),this指针不能被修改和赋值(它存放的是某一个类对象地址);

(2)this指针是一个隐含指针,不能被显示声明,它是类成员函数的第一个默认隐含参数,在函数体内可隐含使用它来访问本类的数据成员和成员函数,它并由编译器自动维护传递;

(3)this指针是局部变量,局部每个对象,在任何非静态成员函数中都可见;

(4)this指针只有在对象调用成员函数时才被初始化重新定向,指向对象隐式传递到成员函数,进入不能再被修改;

(5)this指针并不是对象一部分,不影响sizeof 结果,它的作用域一般在类成员函数内部。



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值