this指针的类型是“指向成员函数所属于的那个类的指针”,也就是说this的类型是“对象名*”。
每个成员函数所收到的第一个参数就是this指针,但是它是隐含的,编译器在每个成员函数的声明中插入这个隐含参数。
例如
class Animal
{
pirvate:
int ID;
char* name;
public:
...
void printName() const
{
cout<<name<<endl;
}
};
在这个例子中,printName()成员函数是无参的-至少表面上是这样的。那么,编译器是怎样识别name呢?
编译器会这样做
void printName(const Animal* this)
{
cout<<this->name<<endl;
}
(有些C程序员十分讨厌C++的也正因如此,“我们不知道C++编译器会背着我们添加什么!”)
另一方面,正因为this是指针类型,所以,this是一个地址值(虽然这对于普通指针是显然的,但一遇到this,很多人会忘记这一点)。因此,它具备普通指针的性质:this是对象的地址,而*this就是对象的值。
最后,不要忘记,this指针仅仅在成员函数内部是合法的。
this指针的概念,在其他OOP语言中同样存在,Smalltalk称之为Self,Eiffel使用Current,或许这两个词更准确一些。