当前位置: 首页 > news >正文

类和对象——(7)this指针

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝
人生就像骑单车,想保持平衡就得往前进!

一起加油!

目录

一、隐含的this指针:

二、this指针讲解:

三、说明: 

 四、注意:

五、共勉:


一、隐含的this指针:

#include<iostream>
#define PI 3.1415926
using namespace std;
class circle{private:int r;public:circle(int pr):r(pr){}double getarea();	
};double circle::getarea(){return PI*r*r;
}int main(){circle cir1(5);circle cir2(10);circle cir3(15);cout<<"半径为5的圆的面积为"<<cir1.getarea()<<endl;cout<<"半径为10的圆的面积为"<<cir2.getarea()<<endl;cout<<"半径为15的圆的面积为"<<cir3.getarea()<<endl;return 0;
}

二、this指针讲解:

        类的每个对象中都拥有数据成员的存储空间。上面的例题中定义了三个对象,因此有三个同样大小的空间存放三个对象的数据成员。但是,cir1、cir2 和 cir3 在调用函数 getarea()时都调用同一段函数代码段。

        当不同对象的成员函数引用数据成员时,如何保证引用的是指定对象的数据成员呢?

        对于cir1.getarea(),应该是引用对象 cir1 中的r,来计算圆 cir1的面积;而对于 cir2.getarea( )来说,则应该是引用对象 cir2 中r,来计算出圆 cir2 的面积。现在 ciri 和 cir2 调用的是同一个函数段,系统应该怎样使函数分别引用 cirl 和 cir2 中的数据成员?

        通过 this 指针可以解决这个问题在每一个成员函数中都包含一个特殊的指针,称为 this 指针。它是指向本类对象的指针。this 指针是一个特殊的隐含指针,它隐含在每一个类的非静态成员函数中(包括构造函数和析构函数),即类的每个非静态成员函数都有一个 this 指针指向调用这个成员函数的对象。当一个对象调用成员函数时,编译系统先将对象的首地址赋给 this 指针,然后调用成员函数。在成员函数存取数据成员时,隐含地使用 this 指针,这样成员函数就能够通过 this 指针来访问目的对象的数据成员。
        例如,当 cir1 调用成员函数 getarea 时,编译系统把对象 cirl 的起始地址赋给 this 指针。因此,在成员函数引用数据成员时,就按照 this 的指向找到对象 cirl 的数据成员。例如 getarea 数要计算 PI*r*r 的值,实际上是执行以下语句:

PI*this->r*this->r;

由于当前 this 指向 cir1,因此相当于执行以下语句:

PI*cir1.r*cir1.r;

这样就计算出圆 cir1 的面积。

        同样地,如果 cir2 调用成员函数 getarea,编译系统就把对象 cir2 的起始地址赋给成员函这样就计算出圆 cir1 的面积。getarea 的 this 指针,计算出来的结果就是 cir2 的面积。this 指针是隐式使用的,它是作为参数被传递给成员函数的。
成员函数 getarea 的定义如下: 

double circle::getarea(){return PI*r*r;
}

C++编译后把它处理为:

double circle::getarea(circle *this){return PI*this->r*this->r;
}

即在成员函数的形参表列中增加一个 this 指针。 

在调用该成员函数时,实际上是用以下方式调用的:

cirl.getarea(&cir1);

将对象 cir1的地址传递给形参 this 指针。然后按 this 的指向去引用对象的成员。

三、说明: 

         上述的这些过程都是编译系统自动实现的,程序设计者不必人为地在形参中增加this 指针,也不必将对象a 的地址传给 this 指针。同时,在需要时也可以显式地使用 this指针。

例如,在 circle 类的 getarea 函数中,下面两种表示方法都是合法并且相互等价的。

return (PI * r *r);				//隐含使用 this 指针
return (PI * this->r * this->r);//显式使用 this 指针

 四、注意:

         可以用*this 表示被调用的成员函数所在的对象,*this 就是 this 所指向的对象,即当前的对象上面的 return 语句也可写成:

return(PI*(*this).r * (*this).r);

*this 两侧的括号不能省略,不能写成*this.r 

五、共勉:

        以上就是我对类和对象——(6)友元的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对类和对象的理解,请持续关注我哦!!! 

相关文章:

类和对象——(7)this指针

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 人生就像骑单车&#xff0c;想保持平衡…...

回溯算法题型分类

题型一&#xff1a;排列、组合、子集相关问题 提示&#xff1a;这部分练习可以帮助我们熟悉「回溯算法」的一些概念和通用的解题思路。解题的步骤是&#xff1a;先画图&#xff0c;再编码。去思考可以剪枝的条件&#xff0c; 为什么有的时候用 used 数组&#xff0c;有的时候设…...

ApplicationRunner 类

优质博文&#xff1a;IT-BLOG-CN 在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件&#xff0c;数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为CommandLineRunner和ApplicationRunner。他们的执…...

QT中的 容器(container)-大全

一、介绍 Qt库提供了一套通用的基于模板的容器类&#xff0c;可以用这些类存储指定类型的项。比如&#xff0c;你需要一个大小可变的QString的数组&#xff0c;则使用QVector<QString>。 这些容器类比STL&#xff08;C标准模板库&#xff09;容器设计得更轻量、更安全并…...

Docker配置镜像加速器

Ubuntu 安装&#xff0f;升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端&#xff0c;参考文档docker-ce配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo t…...

飞致云1panel + 雷池WAF

可能有许多人都有这个需求&#xff1a;为自己的个人站点套上WAF&#xff0c;增加安全性&#xff0c;本文将介绍如何将1panel面板深度结合长亭雷池防火墙&#xff0c;实现为个人站点套上WAF并且自动续签ssl证书。 前提条件&#xff1a; 服务器IP已绑定域名 完整的1panel环境 …...

策略梯度简明教程

策略梯度方法 (PG&#xff1a;Policy Gradient) 是强化学习 (RL&#xff1a;Reinforcement Learning) 中常用的算法。 1、从库里的本能开始 PG的原理很简单&#xff1a;我们观察&#xff0c;然后行动。人类根据观察采取行动。 引用斯蒂芬库里的一句话&#xff1a; 你必须依靠…...

鸿蒙原生应用/元服务开发-利用picker选择器来多选相册图片

前言 在之前的时候&#xff0c;测试一个应用进入相册选择图片demo&#xff0c;利用了startAbilityForResult()方法&#xff0c;启动相对应的Ability来完成效果&#xff0c;但是这种方法有限制&#xff0c;一次只能获取一张图片&#xff0c;在完成某些功能测试的时候就很不方便。…...

java:封装统一的响应体code、data、msg、paging

背景 我们在写接口的时候一般不会直接返回给前端数据&#xff0c;而是会有响应体&#xff0c;比如 code、data、msg&#xff0c;这样就有一个统一的结构方便前端处理&#xff0c;那么今天就来封装一个统一的响应体 封装基本响应体 1、在 config 包里新建 ApiResponse.java …...

leetcode算法之栈

目录 1.删除字符串中的所有相邻重复项2.比较含退格的字符串3.基本计算器II4.字符串解码5.验证栈序列 1.删除字符串中的所有相邻重复项 删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {string ret;//使用数组模拟栈操作for(auto …...

电脑上mp4视频文件无缩略图怎么办

前言&#xff1a;有时候电脑重装后电脑上的mp4视频文件无缩略图&#xff0c;视频文件数量比较多的时候查找比较麻烦 以下方法亲测有效&#xff1a; 1、下载MediaPreview软件 2、软件链接地址&#xff1a;https://pan.baidu.com/s/1bzVJpmcHyGxXNjnzltojtQ?pwdpma0 提取码&…...

【Centos8】配置网络镜像源

文章目录 配置 yum 源配置网络 yum 源备份下载阿里 centos-base.repo 到 /etc/yum.repos.d/安装 EPEL 源测试安装 配置 yum 源 # 检查是否安装了 yum rpm -qa|grep yum# 查看本地已安装的所有软件包 yum list installed# 查看软件包安装位置 # 查看某个东西的软件包 rpm -qa|g…...

深入学习Synchronized各种使用方法

文章目录 前言一、synchronized关键字通用在下面四个地方&#xff1a;1.1synchronized修饰实例方法1.2synchronized修饰静态方法&#xff1a;1.3synchronized修饰实例方法的代码块1.4synchronized修饰静态方法的代码块2.读入数据 二.Sychronized关键特性2.1互斥2.2 刷新内存2.3…...

【idea】设置鼠标滚轮控制缩放大小

1、点击file 选择Setting 2、点击Editor 下面的 General 3、勾选 Mouse Control 下面的 Change font size with CtrlMouse Wheel in 4、点级apply 5、按 ctrl键 鼠标滚轮缩放字体的大小...

合并两个有序数组(leetcode_刷题1)

目录 题目&#xff1a;合并两个有序数组 题目分析方向1&#xff1a; 题目分析方向2&#xff1a; 题目&#xff1a;合并两个有序数组 题目要求&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums…...

麒麟linux将图片批量生成PDF的方法

笔者手里有一批国产linu系统&#xff0c;目前开始用在日常的工作生产环境中&#xff0c;我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux&#xff0c;统信UOS等&#xff0c;基本都是基于debian再开发的linux。 问题描述&#xff1a; wind…...

Linux——vim编辑文件时——.swp文件解决方案

test.cpp样例 当我们vim test.cpp进入编辑文件。 却忘记了保存退出 再次进入就会出现一下画面 当你摁下Enter键位 出现以下几个选项 O——是只读不写 E——是正常打开文件但不会载入磁盘内容 R——覆盖——是加载存储磁盘的文件(当我们忘记保存时&#xff0c;系统会自动帮我…...

【Maven】清理 maven 仓库

初始情况下&#xff0c;我们的本地仓库是没有任何jar包的&#xff0c;此时会从私服去下载&#xff08;如果没有配置&#xff0c;就直接从中央仓库去下载&#xff09;。 可能由于网络的原因&#xff0c;jar包下载不完全&#xff0c;这些不完整的jar包都是以lastUpdated结尾。此…...

APOLLO自动驾驶技术沙龙:未来已来,共创智能交通新时代

在这次Apollo会议上&#xff0c;我深刻地感受到了人工智能自动驾驶技术领域的最新进展和未来趋势。作为一名从事软件开发工作的人员&#xff0c;我深感荣幸能够参加这次盛会。 前言 本次活动是百度Apollo社区工程师齐聚首钢Park&#xff0c;带来现场实操与技术分享。主要围绕Ap…...

Java面试题12

1.redis 怎么实现分布式锁&#xff1f; Redis可以通过以下方式实现分布式锁&#xff1a; 使用RedLock算法&#xff1a;多个Redis节点组合使用&#xff0c;通过竞争锁来达到分布式锁的效果。使用SETNX命令&#xff1a;利用SETNX&#xff08;SET if Not eXists&#xff09;命令…...

5步打造Windows桌面美学:TranslucentTB任务栏透明化完全指南

5步打造Windows桌面美学&#xff1a;TranslucentTB任务栏透明化完全指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 厌倦了Windows系…...

HsMod:炉石传说功能增强插件的全方位优化方案

HsMod&#xff1a;炉石传说功能增强插件的全方位优化方案 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架开发的炉石传说功能增强插件&#xff0c;通过55项实用功能为…...

MetaTube插件:智能元数据整合引擎的技术架构深度解析

MetaTube插件&#xff1a;智能元数据整合引擎的技术架构深度解析 【免费下载链接】jellyfin-plugin-metatube MetaTube Plugin for Jellyfin/Emby 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metatube 在Jellyfin/Emby媒体服务器生态系统中&#xff…...

LingBot-Depth效果实测:与传感器原生深度对比的绝对误差(mm)分布图

LingBot-Depth效果实测&#xff1a;与传感器原生深度对比的绝对误差&#xff08;mm&#xff09;分布图 1. 引言&#xff1a;当深度图遇上“脑补”大师 想象一下&#xff0c;你手里有一张用深度相机拍出来的照片&#xff0c;它告诉你每个像素离相机有多远。但问题是&#xff0…...

告别纯Verilog手搓!用Vivado HLS快速搭建你的第一个CNN加速器(ZYNQ平台实战)

从Verilog到Vivado HLS&#xff1a;ZYNQ平台CNN加速器开发实战指南 在FPGA开发领域&#xff0c;传统RTL设计方法正面临越来越复杂的算法实现挑战。以卷积神经网络(CNN)为例&#xff0c;一个简单的三层网络就可能需要数万行Verilog代码&#xff0c;不仅开发周期漫长&#xff0c;…...

知乎上线求职工具,助力毕业生破困局

知乎上线求职利器&#xff0c;直击毕业生痛点2026届全国普通高校毕业生预计达1270万人&#xff0c;再创历史新高。与此同时&#xff0c;AI技术加速行业重构&#xff0c;部分传统岗位需求收缩&#xff0c;大量毕业生陷入“海投”困境&#xff0c;难以精准定位自身。在此背景下&a…...

避坑指南:Matplotlib调用LaTeX渲染公式时,你可能会遇到的5个报错及解决方法

Matplotlib与LaTeX公式渲染&#xff1a;5个典型报错排查手册 当你第一次在Matplotlib中启用usetexTrue时&#xff0c;屏幕上突然弹出的红色LaTeX错误信息往往让人手足无措。这不是你代码逻辑的问题&#xff0c;而是两个强大工具在握手时产生的"语言障碍"。本文将带你…...

GLM-OCR部署避坑:CPU模式也能用,无显卡用户详细指南

GLM-OCR部署避坑&#xff1a;CPU模式也能用&#xff0c;无显卡用户详细指南 你是不是也遇到过这种情况&#xff1a;看到别人用AI模型轻松识别文档、提取表格&#xff0c;自己也想试试&#xff0c;结果一查部署要求——“需要NVIDIA显卡&#xff0c;显存8GB以上”。手头只有一台…...

seo白帽优化会不会被搜索引擎识别和惩罚_网站使用seo白帽优化会有什么风险

SEO白帽优化会不会被搜索引擎识别和惩罚 在当今互联网时代&#xff0c;网站的流量和排名直接关系到企业的市场竞争力。作为提升网站排名的重要手段&#xff0c;SEO优化被广泛应用。其中&#xff0c;SEO白帽优化是最为推崇的一种方法。SEO白帽优化会不会被搜索引擎识别和惩罚呢…...

【PyTorch 3.0静态图分布式训练黑盒揭秘】:从FX Graph到Triton Kernel调度的7个隐藏断点与性能衰减临界值

第一章&#xff1a;PyTorch 3.0静态图分布式训练面试综述随着大规模模型训练需求激增&#xff0c;PyTorch 3.0正式引入原生静态图编译&#xff08;torch.compile&#xff09;与分布式训练深度协同机制&#xff0c;显著提升多GPU/多节点场景下的吞吐与可复现性。该版本将 torch.…...