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,或許這兩個詞更準確一些。