引言:
首先,我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。
注意:
this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型。
1、this指针的概念
- 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。
- this只能在成员函数中使用,成员函数默认第一个参数为T* const register this。(友元函数,全局函数不是成员函数)
- this指针不能再静态函数中使用,静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。
- this指针的创建,this指针在成员函数的开始执行前构造的,在成员的执行结束后清除。
- this指针只有在成员函数中才有定义。创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。当然,在成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。
2、this指针的操作
在类的非静态成员函数中返回类对象本身的时候,我们可以使用圆点运算符 * 或者箭头运算符 - >
#include<iostream>
using namespace std;
class A{
private:
int x;
public:
A(){
x=0;
}
void display(){
cout<<this<<endl;
cout<<this->x<<endl;
cout<<x<<endl;
cout<<(*this).x<<endl;
}
};
int main(void){
A a;
a.display();
}
输出:
0x70fe40
0
0
0
3、关于this指针的一个经典回答
当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、成员变量,
但是实例本身呢?
this是一个指针,
它时时刻刻指向你这个实例本身。