调用成员函数时,会自动传递隐式参数。 此参数称为this指针,因为它是指向要对其调用函数的对象的指针,并且可以在程序中使用关键字this指针引用城镇。 this指针是c实现封装的机制,它将成员与用于处理这些成员的成员函数相关联。 例如; Location类的成员函数init定义如下:
语音位置:3360 init (intinitx,int inity )。
{
X=initx;
Y=inity;
}
其中,对x和y的引用是指在调用成员函数时引用对象中接受函数调用的成员x和y。 例如,对于以下语句:
位置a位置;
a location.init (5,2 );
调用成员函数init ()时,成员函数的this指针指向对象ALocation。 成员函数init团队对x和y的引用表示引用对象ALocation的成员x和y。 但是,成员函数init ()是怎么知道的呢? 这是由this指针完成的。
c编译器识别的成员函数init ()的定义格式如下:
语音位置:3360 init (intinitx,int inity )。
{
this-X=initx;
this-Y=inity
}
这意味着,无论c编译器访问此成员函数中的哪个类成员,它都访问this指针指向的对象中的成员。 当不同对象调用成员函数init ()时,this指针指向不同的对象,因此成员函数init ) )可以为不同对象的x和y设置初始值。 使用this指针,每个对象都可以有不同的数据成员,但处理这些数据成员的代码可以在所有对象上共享。
this指针对c程序员也很有用。 以下程序具有将成员函数assign ()添加到Locatin类中并将函数对象的状态设置为接受函数调用的对象的参数。
类位置{
隐私:
int X,y;
pubic:
语音初始化(int inity,int inity;
语音识别(位置p;
int GetX (;
int GetY (;
(;
是语音位置:3360分配(位置p )
{
if(jthis==p ) ) )。
; //obj.assign(obj )方式调用时,if语句的表达式this==p为真
else{
X=p.X;
Y=p.Y
}
}
由于同一对象之间相互分配了美丽和含义,因此此函数使用this指针来确定这种情况。
如本例所示,如果需要在成员函数中找到要接受函数调用的对象,则最好使用this指针。 本文档后面的程序还经常使用this指针,因为成员函数需要引用接受函数调用的对象,而不是该对象的成员。
请注意,在成员函数assign ()的定义中,该成员函数访问对象p的私有成员。 这是assign ) ),因此在c中是合法的
是类中描述的成员函数。 一般而言,只要有对象名称或指向对象的指针(和引用),类中描述的成员函数就可以不受限制地访问该对象的私有成员。
this指针的类型为
X *const this;
其中,x是类名。 例如,对于Location类的成员函数,this指针的类型如下:
位置*常数this; 也就是说,该类型是Location类型的常量指针。