关于C++ 中的This指针
在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为This。
它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。
例:成员函数volume的定义是
<pre name="code" class="cpp"> int Box::volume()
{
return(height*width*length); //隐含使用this指针
}
而C++把它处理为
int Box::volume(Box *this)
{
return(this->height*this->width*this->length); //显式使用this指针
}
即在成员函数的形参列表中增加一个this指针。
在调用该成员函数时,实际上用的方法为:a.volume(&a),即将对象a的地址传给形参this,然后按this的指向去引用其他成员。
注:上述过程都是编译系统自己动实现的。(该过程仅为使大家能更好的理解this指针的作用和实现机理)
当然也可以用*this表示被调用的成员函数所在的对象,*this就是this所指向的对象,即当前对象。如下:
int Box::volume(Box *this)
{
return((*this).height(*this).width(*this).length); // *this就是对象a
}
注:this两侧的括号不能去掉,因为成员运算符“.”的优先级别高于指针运算符“*”。
this 指针的特点:
1、this在成员函数的开始前构造,在成员函数的结束后清除。生命周期与其它函数的参数类似。与静态函数的区别:编译器会对this做优化处理,因此使得this指针的传递效率较高。
2、this指针的作用域在类成员函数的内部。全局函数、静态函数都不能使用。
3、this指针并不是对象本身的一部分,不影响sizeof的结果。
4、叫this指针而不是引用的原因:传指针会产生临时变量而传引用不会产生临时变量。