this指针:指向访问成员函数对象的指针,默认是隐藏的,但也可以显示使用。
对象调用成员函数时会自动计算它的内存地址传递给成员函数中的this,而在成员函数调用其它成员函数,会把对象的地址接力传递下去。
构造函数中也有this指针,指向这个正在构造的对象,原因是构造函数执行前对象所需的内存就已经分配完毕,执行构造函数的目的是为了申请其它资源、做一些准备工作,对指针成员分配内存。
this指针的用法:
1、函数参数与成员变量重名,参数会屏蔽成员变量,可以通过this指针访问成员变量。
class Test
{
int a;
public:
Test(int a)
{
this->a = a;
}
};
2、如果成员函数需要返回当前对象的地址或引用,可以使用this指针完成。
class Test
{
public:
Test* func(void)
{
return this;
}
}
3、可以把this指针传递给其它类对象,这样可以实现对象间的交互。
class A
{
public:
int a;
A* func(void)
{
return this;
}
};
class B
{
public:
void func(A* p)
{
cout << p->a << endl;
}
};
常函数:如果对象被const修饰,那么它就不能调用普通的成员函数,因此普通成员函数的this指针没有被const修饰,而const对象在调用成员函数传递的对象指针带const属性,因此不兼容。
在类的成员函数末尾用const修饰一下,就表示用const修饰该成员函数的this指针,这种函数叫常函数,const对象只能调用常函数,常函数也只能调用常函数。
如果一个成员函数可能被const对象和非常对象调用,则可以重载,实现两个版本,const指针和非const指针可以影响函数的重载。
如果在常函数中要修改成员变量值,可以使用mutable修饰成员变量即可。