C++ this 指针详解

Posted thx9537

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ this 指针详解相关的知识,希望对你有一定的参考价值。

问题:当在对象的外部访问该对象的公有成员时,必须指明是哪一个对象。但是当我们用对象的成员函数来访问本对象的成员时,在成员函数中只要给出成员名就可以实现对该对象成员的访问。再进一步可用同一个类创建很多个对象,但它们共用同一份成员函数的拷贝。既然是同一份拷贝,那么成员函数又怎么知道是取哪一个对象的成员数据呢?

其实,当调用一个成员函数时,系统自动产生一个隐藏的指针,这个指针称为this指针,始终指向产生这个调用的对象,并将该指针作为一个参数自动传递给该成员函数。这就是说,成员操作符总是要使用的,只是在对象内是隐式的,而在对象外是显式的。即在对象内省略了this指针。

实际上编译器是这样实现this指针的:
1.改变类成员函数的定义,用附加参数this指针来定义每个成员函数。如:
void Cgoods::RegisterGoods(Cgoods*this,char*nam,
int amount,float price)
    strcpy(this->Name,name);this->Amount=amount;
    this->price=price;

2.每个类成员函数的调用,加上一个附加的实参——被调用对象的地址。如:
    Car1.RegisterGoods ( String , number , pr );
改变为:
    RegisterGoods ( &Car1 , String , number , pr);

在上例中,this指针不必写成显式的,但是有时必须写成显式的,如在以后要学的某些类型的链表管理中,在需要返回当前调用的对象时(对复数类的赋值号重载中 ),等等。但必须指出静态成员函数没有this指针。因为普通成员函数虽然在物理上只有一份拷贝,但在逻辑上都认为一个对象有一份拷贝,所以有this指针,而静态成员函数在逻辑上也只有一份拷贝,不属于具体的对象,当然没有this指针。

以上是关于C++ this 指针详解的主要内容,如果未能解决你的问题,请参考以下文章

C++ this详解

C++ this 指针详解

C++ this 指针详解

c++之类和对象——类的定义,存储方式,this指针!(五千字长文详解!)

[C/C++]详解C++的类和对象

C++|详解类成员指针:数据成员指针和成员函数指针及应用场合