C++ this指针

一、this指针的理解

this指针是一个特殊的指针,指向一个类的具体实例,即一个类的对象。在类中,通过this指针可以访问类的成员变量及成员函数。但this指针并不是对象本身的一部分,不会影响sizeof()操作符的结果。

关于this指针有一个比较经典的举例:当你进去一个房间后,你能看到房子里的电视、冰箱和沙发,但是你却看不见整个房子了。同样的,对于一个类的实例来说,你可以看到他的成员变量,成员函数,而this指针则指向实例本身。

二、this指针的使用

1、this指针是一种特殊的指针变量,不能通过&this来获取this指针的地址。对于普通的指针变量,是用取地址符(&)是可以获取存储该指针变量的地址的,但是对于this指针,将提示:表达式必须是左值或者函数指示符。

2、this指针的作用域仅在类本身的内部,在类的外部this指针将不可访问。有人说,this指针是在类的成员函数的函数体内创建的,在成员函数开始执行前创建,在成员函数执行完成之后清除。也有人认为,this指针在整个类的内部应该都是一直可访问的。

3、当成员函数的参数名与类的成员变量名相同,而要使用该参数给类的成员变量赋值时,需要显示的使用this指针。如:

class TestClass
{
public:
	TestClass();
	~TestClass();
public:
	void SetTest(int test)
	{
		this->test = test;
	}

private:
	int test;

};
上述代码的SetTest中,显示调用了this指针给成员变量test赋值。

4、类的成员函数的第一个参数通常是this指针。ugg在博客 深入探讨this指针中(http://blog.csdn.net/ugg/article/details/606396) 提到:如果参数是确定的,this通过ecx传递给被调用者,否则,this在所有参数之后压栈。即:如果类的成员函数是确定,那么this的存储位置应该在寄存器中,如果参数不是固定的,则this保存在栈中。

5、const 函数中变量不能修改的原因:

public:
	void SetTest (int test) const
	{
		this->test = test;
	}

private:
	int test;
上边的函数不能通过编译,系统将提示表达式必须是可修改的左值,原因在于,此时函数的定义等价于

<span style="white-space:pre">	</span>void SetTest(const TestClass* this, int test)
	{
		this->test = test;
	}
由于this此时是一个指向const变量的指针,因此,该this指针指向的对象的内容不能改变(使用mutable声明的变量除外)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值