this 指针是由系统自动提供的指向对象的特殊指针。该指针是由一个指向某个成员函数操作的对象指针。当对于一个对象调用成员函数时,编译程序先将该对象的地址付给系统创建的this指针,然后调用成员函数。每次成员函数存取数据成员时,都隐含使用this指针。同样也可以的使用*this来标识调用该成员函数的对象。
下面通过一个例子来说明:
#include<iostream>
using namespace std;
class A
{
public:
A()
{
a=b=0;
}
A(int i,int j)
{
a=i;
b=j;
}
void copy(A &aa);
void print();
private:
int a,b;
};
void A::copy(A &aa)
{
if(this==&aa) return ;//如果this指针指向的是当前对象的地址,则直接跳出函数,反之将对象的值付给指针所指向的地址。
*this=aa;//对于指针this进行赋值,* + 指针,表示地址。
}
void A::print()
{
cout<<a<<" "<<","<<b<<endl;
}
int main()
{
A a1,a2(3,4);
a1.copy(a2);
a2.print();
a1.print();
return 0;
}
程序执行结果是:
3 , 4
说明: 在该程序中,类A的成员函数copy()内,出现了两次this指针。其中,*this是操作该成员函数的对象的地址,从main()中可以看出操作该成员函数的对象是a1。*this是操作函数的对象,而下边语句:
*this=aa;
表示将形参aa获得的某个对象的值赋值给该成员函数的对象。在上述例子中,操作该成员函数的对象也是a1。