今天primer中看到了*this P376 ,也查了下百科
关于this指针的一个经典回答:
当你进入一个房子后,
你可以看见桌子、椅子、地板等,
但是房子你是看不到全貌了。
对于一个类的实例来说,
你可以看到它的成员函数、
成员变量,
但是实例本身呢?
this是一个指针,它时时刻刻指向你这个实例本身
尽管在成员函数中显示引用this通常不必要,但当需要将一个对象作为整体引用时显示引用。
在非const成员函数中,this类型是一const指针,即我么们可以改变指向的对象,但不能改变this保存的地址。在const成员函数中,this的类型是一个指向const类类对象的const指针。即不能改变指向的对象也不改变地址
避免使用未初始化的指针,尽量在使用指针的时候定义,当然初始化时可以直接使用cstdlib中定义的NULL赋值为0,是个好习惯
例如,当调用成员函数a.volume时,编译系统就把对象a的起始地址赋给this指针,于是在成员函数引用数据成员时,就按照this的指向找到对象a的数据成员。例如volume函数要计算height*width*length的值,实际上是执行:
(this->height)*(this->width)*(this->length)
由于当前this指向a,因此相当于执行:
(a.height)*(a.width)*( a.length)
这就计算出长方体a的体积。
同样如果有b.volume( ) ,编译系统就把对象b的起始地址赋给成员函数volume的this指针,显然计算出来的是长方体b的体积。this指针是隐式使用的,它是作为参数被传递给成员函数的。
本来,成员函数volume的定义如下:
int Box::volume( )
{
return (height*width*length);
}
C++把它处理为
int Box::volume(Box *this)
{
return (this->height * this->width * this->length);
} 即在成员函数的形参表列中增加一个this指针。
在调用该成员函数时,实际上是用以下方式调用的:
a.volume(&a);
将对象a的地址传给形参this指针。然后按this的指向去引用其他成员。
需要说明: 这些都是编译系统自动实现的,编程序者不必人为地在形参中增加this指针,也不必将对象a的地址传给this指针。在需要时也可以显式地使用this指针。