自引用指针this的详解

简介: 自引用指针this的详解

目录

前言

this指针初识

this指针作用

小结


前言

前面我们介绍了类和对象的基本概念和使用方法,下面我们将进一步对内核对象的其他方面进行交流和讨论,其中包括我们下面要讲的自引用指针this,通过对字引用指针字this的了解,

this指针初识

我们将进一步理解类和对象的使用方法和作用,当一个类他有若干个对象被定义后,系统就会为每一个对象,分配他们相应的存储空间,但是一个类包含的数据成一个成员,函数就要分别为这两个代码分配储存空间,按照一般的思路,如果一个类定义了三个对象,那么就应该分别为这三个对象的数据成员和成员函数的代码分配相应的储存空间,但是事实上确是给对象赋值的时候,就是给对象的数据成员赋值,但是不同对象的存储单元中所放的数据值通常来说就是不相同的,但是不同对象的函数代码又是相同的,所以说不管调用哪一个对象的成员函数其实调用的就是一模一样的代码,

this指针作用

所以C加加的编译系统就用了一段空间来存放这个相同的函数代码段,这就完美的解决这个问题,因为在每个对象乘以函数构造的时候都会去调用这个共用的函数代码,因此每个对象的存储空间都只是该对象数据成员所占用的储存空间,但是不包括成因函数代码所占用的空间 ,下面我们就来看一个栗子:

#include <iostream>
#include <string>
using namespace std;
class A {
  public:
    A(int a, int s);
    void show_score();
  private:
    int age, score;
};
A::A(int a, int s) {
  age = a;
  score = s;
}
void A::show_score() {
  cout << "this 指针值:" << this << "期末成绩:" << this->score << endl;
}
int main() {
  A a(18, 100);   // 创建对象
  A b(19, 99);
  A c(20, 98);
  a.show_score();
  b.show_score();
  c.show_score();
  return 0;
}

输出结果:

this 指针值:0000002A26BDFCC8期末成绩:100

this 指针值:0000002A26BDFCE8期末成绩:99

this 指针值:0000002A26BDFD08期末成绩:98

小结

上面这个例子中,是C++为成员函数提供了一个名字为this的指针,而且这个指针称为自引用指针,就是说每当创建一个新的对象的时候,系统就会默认把this指针初始化,并自动指向对象所以说每当调用一个成员函数时。系统就会自动把this指针当做一个隐含的参数,传给该函数

相关文章
|
算法 测试技术 C语言
【C语言数据结构(基础篇)】第一站:时间复杂度与空间复杂度
【C语言数据结构(基础篇)】第一站:时间复杂度与空间复杂度
288 0
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
|
人工智能 C#
AU音乐制作之如何把音乐的音质提高于320KBps、采样率高于44.1KHz-音频文件处理-adobe audition (原Cool Edit Pro)-世界级好用软件之一
AU音乐制作之如何把音乐的音质提高于320KBps、采样率高于44.1KHz-音频文件处理-adobe audition (原Cool Edit Pro)-世界级好用软件之一
1910 66
AU音乐制作之如何把音乐的音质提高于320KBps、采样率高于44.1KHz-音频文件处理-adobe audition (原Cool Edit Pro)-世界级好用软件之一
|
11月前
|
数据可视化 前端开发 数据挖掘
使用Folium在Python中进行地图可视化:全面指南
Folium是基于Python的交互式地图可视化库,依托Leaflet.js实现地理空间数据展示。本文从安装、基础使用到高级功能全面解析Folium:包括创建地图、添加标记、保存文件,以及绘制热力图、多边形和Choropleth地图等高级操作。通过展示北京市景点与全球地震数据的实际案例,结合性能优化、自定义样式和交互性增强技巧,帮助用户掌握Folium的核心功能与应用潜力,为数据分析提供直观支持。
1179 3
|
存储 SQL NoSQL
非关系型数据库(NoSQL)
【4月更文挑战第9天】非关系型数据库(NoSQL)是分布式、非结构化、不遵循ACID原则的数据存储系统,常用于大规模数据存储和高并发场景。其类型包括键值对、文档型、列式和图形数据库。与关系型数据库不同,NoSQL数据模型更灵活,适合社交媒体和物联网应用,但在复杂事务处理上不如后者。实际应用中,通常会根据需求选择合适的数据库类型。
616 3
|
11月前
|
Java 开发者
课时117:处理多个异常
课时117介绍如何处理多个异常。程序执行中可能出现多种异常,如未输入参数(ArrayIndexOutOfBoundsException)、输入非数字(NumberFormatException)和除数为0(ArithmeticException)。通过使用多个`catch`语句,可以分别捕获并处理这些异常,确保程序的健壮性。示例代码展示了如何在Java中实现这一机制,并通过`finally`块确保某些代码无论是否发生异常都会执行。修改后的代码能够正确处理所有提到的异常情况,避免程序中断。
138 2
|
存储 缓存 监控
一种基于动态代理的通用研发提效解决方案
作为一名研发人员,除了业务开发之外,研发提效是一个永恒的话题,而女娲正是这一话题下进行的一次全面的剖析和实践。
110183 26
|
网络协议
优先级总结
优先级总结
381 1
|
安全 Java 测试技术
Java“AccessControlException”解决
Java中的“AccessControlException”通常发生在尝试访问受限资源时,如文件或网络。解决方法包括:确保所需权限已授予,检查安全策略配置,使用doPrivileged块执行敏感操作。调整策略文件或代码以匹配实际需求。
766 1
|
运维 Kubernetes Cloud Native
探索云原生架构:企业数字化转型的新引擎
本文深入探讨了云原生架构作为企业数字化转型的新引擎,如何通过其轻量级、松耦合、高度可扩展和自动化的特性,助力企业在激烈的市场竞争中脱颖而出。不同于传统的云计算模式,云原生强调应用的微服务化、容器化以及动态管理,从而极大地提高了资源利用效率、加快了产品迭代速度,并增强了系统的弹性和容错能力。通过对Kubernetes、Docker等关键技术的运用实例分析,本文展示了云原生架构在实现应用快速部署、无缝迁移和跨平台一致性方面的独特优势。此外,文章还讨论了企业在采用云原生过程中面临的挑战及应对策略,为正在或计划进行数字化转型的企业提供了宝贵的参考和指导。

热门文章

最新文章