现在的位置: 首页 > 综合 > 正文

C++this指针

2012年09月01日 ⁄ 综合 ⁄ 共 1355字 ⁄ 字号 评论关闭

当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向接受该函数的调用的对象的指针,在程序中可以使用关键字this指针来引用改指针,因此称该指针为this指针。this指针是c++实现封装的一种机制,它将成员和用于操作这些成员的成员函数联系在一起。例如;Location类的成员函数init被定义为:

void Location::init(int initx,int inity)

{

X=initx;

Y=inity;

}

其中对X和Y的引用表示在该成员函数被调用时,引用接受该函数调用的对象中的成员X和Y。例如,对于下面的语句:

Location ALocation;

ALocation.init(5,2);

当调用成员函数init()时,该成员函数的this指针指向对象ALocation。成员函数init中队X和Y的引用表示是引用对象ALocation的成员X和Y。但成员函数init()如何知道这一点的呢?这由this指针来完成。

 c++编译器所认识的成员函数init()的定义形式为:

void Location::init(int initx,int inity)

{

this->X=initx;

this->Y=inity;

}

即对于该成员函数中的访问任何类成员,c++编译器都认为是访问this指针所指向的对象中的成员。由于不同的对象调用成员函数init()时,this指针指向不同的对象,因此,成员函数init()可以为不同的对象X和Y置初值。使用this指针,保证每个对象可以拥有不同的数据成员,但处理这些数据成员的代码可以被所有的对象共享。

this 指针对c++程序员也很有用。下面的程序在Locatin类中增加了一个成员函数assign(),它带有一个参数,它将函数对象的状态置给接受该函数调用的对象。

class Location{

private:

int X,Y;

pubic:

void init(int initx,int inity);

void assign (Location& p);

int GetX( );

int GetY( );

};

void Location::assign (Location& p)

{

if (jthis ==&p)

;//使用obj.assign(obj)方式调用时,if语句的表达式this ==&p为真

else{

        X=p.X;

       Y=p.Y;

   }

}

由于同一个对象之间相互赋值没有意义,所以这个函数使用this 指针判断这种情况。

象本例这样,当需要在成员函数中检测接受函数调用的对象时,使用this 指针是恰当的。在本书后面的程序中,由于在成员函数中需要引用接受函数调用的对象,而不是该对象的成员,也经常使用this指针。

注意,在成员函数assign( )的定义中,该成员函数访问了对象p的私有成员,这在c++中是合法的,因为assign( )

是在类中说明的一个成员函数。一般而言,只要存在一个对象名或指向对象的指针(及引用),在类中说明的成员函数可以不受限制地访问该类对象的私有成员。

this指针的类型为

X  *const this;

其中X是一个类名。例如,对于Location类的成员函数而言,this指针的类型为:

Location *const this;即它的类型为Location类型的常量指针。 

抱歉!评论已关闭.