this指针是一个仅能被类的非静态成员函数所能访问的特殊指针。当一个对象调用成员函数时,编译器先将对象的地址赋给this指针,然后调用成员函数。例如,当下列成员函数调用时:
one.copy(two);
它实际上被解释成:
copy(&one,two);
只不过&one参数呗隐藏了。需要说明的是,通过*this可以判断是哪个对象来调用该成员函数或者重新制定对象。例如:
/*this 指针*/
class Cone
{
public:
Cone(){x=y=0;}
Cone(int a,int b){x=a;y=b;}
void copy(Cone &one);
void print(){cout<<x<<","<<y<<endl;}
private:
int x,y;
};
void Cone::copy(Cone &one)
{
if(this==&one) return;
*this=one;
}
void main()
{
Cone one,two(3,4);
one.print();
one.copy(two);
one.print();
}
程序中,使用this指针的函数是copy,它在copy函数中出现了2次。“if(this == &a)”中的this是操作该成员函数的对象的地址,从main函数中的“one.copy(two);”可以看出这个对象就是one。copy函数中的语句
*this = a;
是将形参a(对象的引用)赋给操作该成员函数的对象。在本例中,就是将对象two赋给对象one。因此,main函数中最后的语句“one.print();”实际上就是“two.print();”。