C++的This详解

news2024/11/20 9:25:00

目录

听说点赞的UU会有好运哦!

听说点赞的UU会有好运哦!

听说点赞的UU会有好运哦!

this指针:

面试常考this:

特别注意:


this指针:

类不保存成员函数,而是放在公共代码段(为什么?答案在C++类详解-CSDN博客)
那么,问题来了:
既然是同一个函数,按理说执行结果应该都是一样的
那么它是怎么做到不同的类对象执行不同的成员函数呢?
使用this指针
当对象1调用函数f()时,传参为f(&对象1)
当对象2调用函数f()时,传参为f(&对象2)
...
以此类推
而这个传参,是不是每一次都是我们自己来传呢?
不是,而是编译其来完成
用this指针
这个this就是当前类的指针
注意:
1、形参和实参的位置,我们不能显示写出来
2、在函数内部可以使用
f(const classname* const this){}

面试常考this:


this在那个区?
1、堆 (malloc)
2、栈(局部变量、形参)
3、静态区(static、全局变量)
4、常量区(const不在常量区,const修饰的是后面的对象)
5、对象内(成员变量)

所以,this是在栈区,因为this是一个形参

如果对象为空指针,但是却要调用对象的成员函数,如果这个成员函数没有对这个对象进行解引用,那就不会出错
只不过是对象的成员函数的参数this为空指针而已,我传一个空指针有问题吗?没有任何问题
但是,如果这个成员函数对this进行了解引用,就会出问题,出现空指针解引用的问题

例如下图中,创建了一个A类的对象,并且初始化为nullptr,同时对空指针进行了解引用,按道理来说,应该会出错才对,但是并没有,就是因为根本就没有用到这个空指针,所以也就不会进行解引用,而且,我们在编译阶段call的函数地址都是一样的,也再一次证明类的成员函数没有存储在类内部


特别注意:


因为对象的成员函数不是在对象内部的
所以,当要调成员函数的时候,并不需要用类的对象去进行调用
所以,即使是类的对象是一个空指针,也不会对这个空指针进行解引用
为什么?
因为,对象的成员函数的调用只需要一个this指针作为成员函数的参数
而这个this指针指向的是对象
那么,请问,我传参
是否在乎这个参数是空指针,还是非空指针呢?
不在乎
谁在乎?
只有成员函数内部是否需要对this进行解引用的时候才有关系


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1514218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flutter第四弹:Flutter图形渲染性能

目标: 1)Flutter图形渲染性能能够媲美原生? 2)Flutter性能优于React Native? 一、Flutter图形渲染原理 1.1 Flutter图形渲染原理 Flutter直接调用Skia。 Flutter不使用WebView,也不使用操作系统的原生控件,而是…

【计算机网络实践】FileZilla Server1.8.1实现局域网ftp文件传输

大二新生随便写写笔记,轻喷,鉴于本人在网络搜索中并未搜索到1.8.1版本的使用方法,因而瞎写一页。 一、准备 下载一个FileZilla Server1.8.1在你想作为服务器的主机上(此处直接在官网下载即可:Download FileZilla Serve…

stimulsoft report for js vue3使用

项目后端使用的java,试验过积木报表(web界面类型的)、JasperReport(.jasper报表文件)、stimulsoft web版本(.mrt报表文件) 我们的项目是前后端分离的,用积木报表(开箱即…

Spring boot 集成netty实现websocket通信

一、netty介绍 Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和U…

【研发日记】,Matlab/Simulink开箱报告(十)——Requirements Toolbox

前言 见《开箱报告,Simulink Toolbox库模块使用指南(五)——S-Fuction模块(C MEX S-Function)》 见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》 见《开…

狂揽Github—start19.7k☆开源OCR—Umi-OCR

文章目录 背景Umi-OCR—源码下载Umi-OCR—可执行程序下载页面介绍截图OCR识别批量OCR识别批量文档二维码全局设置 总结: 背景 大家都知道我是一个Python办公自动化的小小程序员,经常收集一些免费开源的OCR供大家使用,目前我已经写出来多家OCR…

集智书童 | 炸裂 !轻量化YOLO | ShuffleNetv2与Transformer结合,重塑YOLOv7成就超轻超快YOLO

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。 原文链接:炸裂 !轻量化YOLO | ShuffleNetv2与Transformer结合,重塑YOLOv7成就超轻超快YOLO 随着移动计算技术的迅速发展,在移动…

flutter入门

本文真对 Flutter 的技术特性,做了一些略全面的入门级的介绍,如果你听说过Flutter,想去了解它,但是又不想去翻厚厚的API,那么本文就是为你准备的。 随着纯客户端到Hybrid技术,到RN&Weex,再…

【OpenGL手册13】 光照贴图

目录 一、说明二、漫反射贴图三、镜面光贴图四、采样镜面光贴图练习 一、说明 在上一节中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观,但是这仍不能对一个…

C#重新认识笔记_ FixUpdate + Update

C#重新认识笔记_ FixUpdate Update Update: 刷新频率不一致,非物理对象的移动,简单的刷新可用, FixedUpdate: 刷新频率一致,按照固定频率刷新,一般调用FixedUpdate之后,会立即进入必要的物理计算中,因此,任何影响刚…

层次式架构设计

本博客地址:https://security.blog.csdn.net/article/details/136660435 一. 概述 1、软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。层次式体系结构设…

王庆:当下股市过于悲观,A股、港股基本完成补跌和普跌过程,逆向布局时机已到

核心观点: 1、房地产对中国经济增长拖累最严重的时期正在过去...密切关注真正拐点的出现。 2、当前资本市场从价格表现上来讲,表现的远远超过了基本面所决定的悲观程度。 由于当前资本市场过于悲观,那么反过来就是孕育着机会。 3、我们判…

leetcode刷题(javaScript)——分治思想(二分查找、快速排序)相关场景题总结

分治思想是一种将问题分解成更小的子问题,然后解决子问题并将结果合并的算法设计策略。二分查找、快速排序和折半查找都属于分治思想的经典算法。在leetcode里,分治思想一般结合其他场景出现,构成复合型题目。但是在看题时一定要了解能否用分…

Docker入门二(应用部署、迁移与备份)

文章目录 一、应用部署1.MySQL部署2.Redis部署3.Nginx部署 二、迁移与备份1.容器做成镜像2.把镜像被分成压缩包 一、应用部署 1.MySQL部署 在dokcer中部署mysql,以后不需要在宿主机上装mysql1.做端口映射docker run -id --namemysql5.7 -p 3306:3306 -e MYSQL_ROOT…

九数分三组

枚举三位数时,不用写三个循环,写出最小和最大数循环就行。在这题里要求三个数中不能有重复的数字,先转换为字符串,再转换为字符数组进行排序,最后比较字符串就可以得出结果。这题把结果和原因调换了一下

每日OJ题_牛客HJ37 统计每个月兔子的总数(IO型OJ)

目录 牛客HJ37 统计每个月兔子的总数 解析代码 牛客HJ37 统计每个月兔子的总数 统计每个月兔子的总数_牛客题霸_牛客网 解析代码 #include <iostream> #include <vector>using namespace std; int main() {int n 0;cin >> n;vector<int> arr(n 1…

牛客Highway

题目大意 在ICPCCamp中&#xff0c;有n个方便编号的城镇&#xff0c;编号为1,2,...,n&#xff0c;它们之间通过&#xff08;n-1&#xff09;条道路相连。连接第i个城镇a_i和b_i的道路的长度为c_i。保证任意两座城市之间只能通过道路到达。 Bobo希望修建&#xff08;n-1&#…

PostGIS 中的 K-Means 聚类操作及应用

K-Means算法&#xff1a; K-means 是数据科学和商业的基本算法。让我们深入了解一下。 1. K-means是一种流行的用于聚类的无监督机器学习算法。它是用于客户细分、库存分类、市场细分甚至异常检测的核心算法。 2. 无监督&#xff1a;K-means 是一种无监督算法&#xff0c;用于…

记录一下C++的学习之旅吧--C++基础

文章目录 前言using namespace std; 使用标准命名空间一、helloworld-输出表示1.1代码1.2 运行结果 二、变量2.1.1 普通变量代码2.1.2 运行结果2.2.1 常量和变量代码2.2.2 运行结果 三、sizeof---统计数据类型所占的内存大小3.1 代码3.2 运行结果 四、小数表示4.2 运行结果 五、…

C语言分析基础排序算法——计数排序

目录 计数排序 计数排序基本思路 计数排序改进思路 计数排序 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。具体思路为&#xff1a; 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 计数排序基本思路 基本思路分析&#xff1a; //以…