C++this指针分析

1.什么是this指针

  this指针是隐含定义在非静态成员函数中的参数,类的非静态成员函数访问非静态成员时,编译器会将对象本身的地址传给函数作为隐含参数。this指针就是当前对象的地址,对各成员的访问是通过this 指针进行的。

2.this指针的特性

 this指针是 类类型* const this
 this指针不是对象的一部分,不影响sizeof()的结果
 this指针的作用域是在非静态成员函数的内部
 this指针是 类成员函数第一个隐含参数,由编译器负责传递维护

3.this指针的代码分析
 

class Date
{
public :
	Date(int year = 1900, int month = 1, int day = 1)
	{
		this->year = year;
		this->month = month;
		this->day = day;
	}
	Date(Date& d)
	{
		this->year = d.year;
		this->month = d.month;
		this->day = d.day;
	}
	void dosomthing()
	{

	}
private:
	int year;
	int month;
	int day;
};

void Funtest()
{
	Date d1(2017, 2, 18);
	d1.dosomthing();
	Date d2(d1);
	d2.dosomthing();
}
int main()
{
	Funtest();
	system("pause");
	return 0;
}


  在这段代码中定义了一个构造函数,一个拷贝构造函数和一个普通成员函数。在创建d1对象时,调用了构造函数,构造函数是没有this指针这个参数的,但是在监视窗口中可以看到this指针,而且它的值就是对象d1的地址。

d1调用普通成员函数dosomthing()时,这个函数中是没有参数的,但是也可以通过监视窗口查看到有this指针,而且this的值是d1的地址。
通过创建对象d2,对象d2调用普通成员函数dosomthig(),也可以清楚看到函数中隐藏了this指针这个参数,并且this指针的值就是对象d2的地址。

这样做可以保证不同对象的成员函数使用数据成员时,使用的一定是指定对象的数据成员。


4.为什this指针不能在函数中使用?

静态成员函数并不是针对某个类的实例对象,而是属于整个类的,为所有的对象实例所共有。它在作用域的范围内是全局的,独立于类的对象之外的。它只对类内部的静态成员变量做操作。当实例化一个类的对象时候,里面不存在静态成员的。this指针是相当于一个类的实例的指针,this是用来操作对象实例的内容的,既然静态成员函数和变量都是独立于类的实例对象之外的,它就不能用this指针,也不能操作非静态成员。

5.我们只有获得一个对象后,才能通过对象使用this指针,如果我们知道一个对象this指针的位置,能否直接使用?

获取一个对象之后,我们不应该也不需要在类外使用this对其操作,this是一个右值,是非静态成员函数的一个隐藏参数,不存在所谓的this的“位置”,只是用this标记了对象所存在的位置,&this不会通过编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值