this指针C++

简介: 🐰this 指针🌸this指针的定义🌸this指针的应用🌸this指针的注意事项:

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

🐰this 指针

🌸this指针的定义

🌸this指针的应用

🌸this指针的注意事项:


🐰this 指针

🌸this指针的定义

c++为类的对象分配内存空间时只为对象的数据成员分配内存空间,而将对象的成员函数放在另外一个公共区域,同一个类的多个对象共享它们的成员函数。那么,同一个类的多个对象的成员函数在访问对象的数据成员时,怎么确保访问的是正确的数据成员呢?例如声明的长方体类Box,定义了两个对象box1和box2,对于调用“box1.volume()”,应该box1中的height,width和length计算长方体box1的体积,对于“box2.volume()”,应该box2中的height,width和length计算长方体box1的体积。现在box1和box2调用的都是同一段代码,系统是怎么区分应该访问box1的数据成员还是box2的数据成员呢?

其实在每一个成员函数中都包含了一个特殊的指针,这个指针的名字是固定的,称为this指针。this指针是指向本类对象的指针,它的指向是被调用成员函数所在的对象,即调用哪个对象的该成员函数,this指针就指向哪个对象。在成员函数内部访问数据成员的前面隐藏着this指针。如前面前面提到的Box类中的volume函数,其中的height*width*length实际等价于(this->height)*(this->width)*(this*length)。如果调用box1对象的volume函数,则this指针就指向对象box1,所以(this->height)*(this->width)*(this*length)就相当于(box1.height)*(box1.width)*(b ox1.length),这样就是计算的box1的体积。

🌸this指针的应用

this指针是由系统通过参数隐式传递给成员函数的。如下列成员函数volume的定义:

1. float Box::volume()
2. {
3.     return  height*width*length;
4. }

c++系统隐式处理为:

1. float Box::volume(Box* this)
2. {
3.     return  (this->height)*(this->width)*(this*length);
4. }

在函数形参表中增加一个this指针,而在调用时隐藏增加一个实参:

box1.volume(&box1);

需要注意的是,以上是帮助理解this指针的作用和它的工作原理,这些操作都是系统自动完成的,在使用时不需要再数据成员前面加上this指针,更不用调用的时候写出调用成员函数对象的地址作为实参。

有时候我们也会显示使用this指针,例如
1. Box的构造函数box,数据成员为length, width, weight
2. Box::box(float length, float width, float weight)
3. {
4.     length=length;
5.     width=width;
6.     weight=wight;
7. }

这样构造函数的定义,系统就分不清,哪个length是数据成员,哪个length是形参,因为他们的名字一样

修改为:

1. Box::box(float length, float width, float weight)
2. {
3.     this->length=length;
4.     this->width=width;
5.     this->weight=wight;
6. }

这样系统就可以分清,’=‘左边的是数据成员,’=‘右边的是形参

🌸this指针的注意事项:

this指针并不是创建对象的一部分,this指针的类型取决于使用this指针的成员函数类型以及对象类型。

this指针不能再静态函数中使用

this指针在成员函数的开始执行前构造的,在成员函数的执行结束后清除。

创建一个对象后,不能通过对象使用this指针。也无法知道一个对象的this指针的位置,在成员函数里,你可以知道this指针的位置通过&this,也可以直接使用的。

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸    

相关文章
|
16天前
|
C++
C++(十八)Smart Pointer 智能指针简介
智能指针是C++中用于管理动态分配内存的一种机制,通过自动释放不再使用的内存来防止内存泄漏。`auto_ptr`是早期的一种实现,但已被`shared_ptr`和`weak_ptr`取代。这些智能指针基于RAII(Resource Acquisition Is Initialization)原则,即资源获取即初始化。RAII确保对象在其生命周期结束时自动释放资源。通过重载`*`和`->`运算符,可以方便地访问和操作智能指针所指向的对象。
|
16天前
|
C++
C++(九)this指针
`this`指针是系统在创建对象时默认生成的,用于指向当前对象,便于使用。其特性包括:指向当前对象,适用于所有成员函数但不适用于初始化列表;作为隐含参数传递,不影响对象大小;类型为`ClassName* const`,指向不可变。`this`的作用在于避免参数与成员变量重名,并支持多重串联调用。例如,在`Stu`类中,通过`this->name`和`this->age`明确区分局部变量与成员变量,同时支持链式调用如`s.growUp().growUp()`。
|
29天前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
23 1
|
1月前
|
安全 NoSQL Redis
C++新特性-智能指针
C++新特性-智能指针
|
1月前
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
|
1月前
|
存储 C++
c++学习笔记06 指针
C++指针的详细学习笔记06,涵盖了指针的定义、使用、内存占用、空指针和野指针的概念,以及指针与数组、函数的关系和使用技巧。
29 0
|
1月前
|
安全 编译器 容器
C++STL容器和智能指针
C++STL容器和智能指针
|
1月前
|
C++
C++通过文件指针获取文件大小
C++通过文件指针获取文件大小
24 0
|
1月前
|
编译器 C语言 C++
【C++关键字】指针空值nullptr(C++11)
【C++关键字】指针空值nullptr(C++11)
|
1月前
|
算法 C++ 容器
【C++算法】双指针
【C++算法】双指针