C++提供了一个特殊的对象指针-----this指针,它是成员函数所属对象的指针,它指向类对象的地址。成员函数通过这个指针可以知道自己属于哪一个对象。
this指针是一个隐含的指针,它隐含于每个类的非静态成员函数中,它明确地表示出了成员函数当前操作的数据所属的对象。当一个对象调用成员函数时,编译程序先将对象的地址赋值给this指针,然后调用成员函数。每次成员函数存取数据成员时,会隐含使用this指针。
示 例:
Date& Date::AddYear(int n)
{
if(day==29 && month==2 && !IsLeapYear(year+n))
{
day=1;
month=3;
}
year+=n;
return *this;
}
上面这段代码等价于:
Date& Date::AddYear(int n)
{
if(this->day==29 && this->month==2 && !IsLeapYear(this->year+n))
{
this->day=1;
this->month=3;
}
this->year+=n;
return *this;
}
等价的原因是由于this指针隐含于每一个类的非静态成员函数中,它可以引用对象的数据成员和成员函数。
一般情况下,this指针的使用都是隐含的,但也可以显示使用它:
void A::copy(A& a)
{
if(this==&aa) //显示使用this指针
return; //避免自身对自身赋值
*this=aa;
};
在上面这段代码中,this指针指向正在被copy成员函数操作的对象;*this标识调用该成员函数的对象;每个对象都可以通过this指针访问自己的地址。