学习C++、QT---07(C++的权限、C++的引用)

每日一言

        你解决的每一个难题,都是在为未来的自己解锁新技能。

权限的讲解

这边呢我们利用银行的一个案例来讲解权限的奥秘  权限指的是public、private 、protected 就是这三种权限,因此有这一张表进行分清他们之间的区别和联系

但是我们在平时的话会因为项目不够大的情况下我们看不出来权限的威力,也就是我们现在还在学习语法阶段,真的很难去体会到权限的作用,真正的作用,这边我利用了一个银行的案例,来初识权限

就是我们一般去银行取钱存钱的操作,是不能直接操作账户(意思就是不能直接冲进银行把钱修改成1亿的)的,我们作为用户只能通过银行做的公共的接口来与银行的数据做交互,比如ATM机和柜台进行操作(类比接口),所以我们这边就等于是,银行的类的属性是私有的,只有银行内部可以修改,我们作为外部用户的人,只能通过银行的public的函数进行修改银行的数据

这个是和现实案例挂钩的,所以这样才能知道为什么要这样做,权限的作用

总结:

银行场景

面向对象编程

核心作用

银行账户数据(余额、密码)

类的私有属性(Private Fields)

隐藏内部实现细节,防止外部非法修改

ATM 机、柜台

类的公共方法(Public Methods)

作为外部访问的唯一通道,控制数据操作的合法性

密码验证、余额检查

方法内部的业务逻辑

确保数据操作符合规则(如 “不能取负数”“密码正确”)

用户(你)

类的调用者(Client)

只能通过公共接口与类交互,无法直接操作内部数据

  1. 也就是我们外部的人无需知道这个ATM机是怎么实现的,只需要调用即可
  2. 外部人员只能操作ATM机才能访问到银行的数据,ATM机内部的实现保证了银行数据的安全性

不能让我们直接将银行的数据进行修改成1亿、这个就是权限的重要性

上面 的name 和money就是银行的数据  那么我们其实不用写private的,因为类的数据默认就是private

下面4个函数,这个就是公共的函数,我们作为外部人员就允许使用这个公共的安全的接口与银行实现交互,

因为我们外部想要使用银行的这个几个函数,所以银行的这几个函数也必须设置成public

主要就是这些,代码也不需要讲了。都是很基础的,注意C++的语法问题就可以了,比如说函数的隶属问题要加上::双冒号,其他也没什么了

C++中的引用

案例1:

 

引用什么意思呢,就是给我们的变量取个别名,比如这边int& s = i;引用是这个写法,意思为:给int 型的i变量搞一个引用叫做s

有什么作用呢  就是我们想要输出i的值的时候,我们可以

这两个的值都是一样的,原理是啥呢,就是我们的引用就是给变量取个别名,地址还是同一个地址,所以操作的数据也是一样的

案例2:

在 C++ 中,int& a 表示 a 是一个引用,它是传入变量的 “别名”,而非独立的新变量。

  • 当调用 swap(a, b) 时,函数参数 int& a 会 “绑定” 到 main 函数里的变量 a(值为 10),int& b 绑定到 main 里的变量 b(值为 20)。
  • 此时,swap 里的 a 和 main 里的 a 是同一个内存地址swap 里的 b 和 main 里的 b 也是同一个内存地址

我解释一下这个为什么是错误的交换:

因为原理很简单,就是因为不在同一个栈空间,所以虽然两个都叫做a  但是一个是村长a  一个是省长a

为什么不在同一个栈空间??

因为一个是swap函数,一个是main函数,两个函数也不是包含关系,都是互相独立的,每个函数都会在栈空间申请一个内存,因此地址也不一样

案例3:返回值为引用

我们可以看到这个函数的返回值为int& 这个就是引用类型 ,那么我们这个函数的设计是为了改变array数组的值,

我们这个int&  ret =array[i] 的意思就是把数组的元素位置 把array[i]这个名字起个别名叫做ret ,

那么我们这个setValue(4)=99这个是什么意思呢,就是等同于array[4] = 99;因为我们的setValue函数的实现是这样写的,返回的是ret这个引用 ,又是将ret作为别名,诶呦妈的看函数就看的懂啦

记住我们不能这样写,因为a是局部变量,然后这个函数到return之后,那么这个a和这个a的引用就被销毁了,那么语法就是错误的,一定要把a写成全局变量

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

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

相关文章

全球化短剧平台全栈技术架构白皮书:多区域部署、智能分发与沉浸式体验的完整解决方案

一、全球化基础架构深度设计 全球网络基础设施构建 采用多活数据中心部署模式,在北美(弗吉尼亚)、欧洲(法兰克福)、亚太(新加坡)建立三大核心枢纽节点 构建混合CDN网络,整合AWS Clo…

深入剖析 LGM—— 开启高分辨率 3D 内容创作新时代

一、引言 在当今数字化时代,3D 内容创作的需求如井喷般增长,从游戏开发中绚丽多彩的虚拟世界,到影视制作里震撼人心的特效场景,再到工业设计中精准无误的产品原型,3D 技术无处不在。然而,传统 3D 内容创作…

从用户到社区Committer:小米工程师隋亮亮的Apache Fory成长之路

Apache Fory 是一个基于JIT和零拷贝的高性能多语言序列化框架,实现了高效紧凑的序列化协议,提供极致的性能、压缩率和易用性。在多语言序列化框架技术领域取得了重大突破,推动序列化技术步入高性能易用新篇章!这一切,都…

【Koa系列】10min快速入门Koa

简介 koa是基于node开发的一个服务端框架,功能同express,但更小巧简单。 官方仓库地址:https://github.com/koajs/koa 创建项目 创建文件夹nodeKoa,执行以下脚本 npm init -y npm i koa npm i nodemon 基础示例 创建一个服…

IDEA与通义联合:智能编程效率革命

IDEA与通义联合:智能编程效率革命 当最强Java IDE遇上顶尖AI助手,会碰撞出怎样的生产力火花? 思维导图解读:智能编程工作流 #mermaid-svg-uTAcSs1kBBmDwGfM {font-family:"trebuchet ms",verdana,arial,sans-serif;font…

Docker 数据持久化完全指南:Volume、Bind Mount 与匿名卷

Docker 数据持久化完全指南:Volume、Bind Mount 与匿名卷 引言 在 Docker 中,容器的文件系统默认是临时的,容器删除后数据也会丢失。为了实现数据持久化,Docker 提供了多种存储方式,主要包括: docker vo…

OSS跨区域复制灾备方案:华东1到华南1的数据同步与故障切换演练

1. 引言 对象存储服务(OSS)已成为现代数据架构的核心组件。随着业务全球化,跨区域数据灾备从“可选”变为“必选”。本文以阿里云OSS为实验环境,实战演练华东1(杭州)到华南1(深圳)的…

前端登录状态管理:主流方案对比与安全实践指南

根据目前业内前端登录状态管理的主流设计方案,及其演进趋势进行汇总,生成主要包括如下内容的报告: 登录状态保持的基础原理:从HTTP无状态问题出发解析技术需求,使用表格对比核心挑战。主流技术方案对比:详…

动手用 Web 实现一个 2048 游戏

文章目录 为什么选择 2048?关键技术点与算法详解HTML 结构:搭建游戏界面CSS 样式:美化游戏界面JavaScript 核心逻辑:驱动游戏运行1)数据结构:二维数组表示游戏网格2)核心算法:添加随…

frp v0.62.1内网穿透搭建和使用

官网:https://gofrp.org/zh-cn/ Github:https://github.com/fatedier/frp 开源项目 frp frp 是一种快速反向代理,允许您将位于 NAT 或防火墙后面的本地服务器公开给 Internet。目前支持 TCP 和 UDP,以及 HTTP 和 HTTPS 协议&…

如何使用 USB 数据线将文件从 PC 传输到 iPhone

虽然用 USB 数据线将文件从 PC 传输到安卓设备非常容易,但对于 iPhone 用户来说,情况就不同了。不过,幸运的是,我们找到了三种可靠的方法,可以使用 USB 数据线将文件从 PC 传输到 iPhone,让您轻松完成这项任…

【C++高阶三】AVL树深度剖析

【C高阶三】AVL树深度剖析 1.什么是AVL树2.AVL树的实现2.1节点类和基本结构2.2插入2.3旋转处理2.3.1左单旋2.3.2右单旋2.3.3左右双旋2.3.4右左双旋 1.什么是AVL树 AVL树也叫二叉搜索平衡树 因为二叉搜索树如果插入顺序是有序的,那么这棵树的查找效率将会是O(N)&…

LangChain 文本分割器深度解析:从原理到落地应用(上)

食用指南 LangChain 作为大语言模型应用开发框架,文本分割器是其核心组件之一,本文以此作为切入点,详细介绍文本分割的作用、策略、以及常见的文本切割器应用。考虑到篇幅过长,故拆分为上、中、下三篇,后续会在中篇介…

【Java高频面试问题】高并发篇

【Java高频面试问题】高并发篇 Kafka原理核心组件高吞吐核心机制高可用设计 Kafka 如何保证消息不丢失如何解决Kafka重复消费一、生产者端:根源防重二、消费者端:精准控制三、业务层:幂等性设计(核心方案) 如何解决Kaf…

关于结构体,排序,递推的详细讲解(从属于GESP四级)

本章内容 排序算法基础 结构体 递推 简单双指针 一、排序算法基础三剑客 冒泡 Bubble、选择 Selection、插入 Insertion 1. 预备知识 1.1 排序算法评价指标 指标 含义 影响答题的典型问法 时间复杂度 算法在最坏、平均或最好情况下所需比较 / 交换次数 “写出此算法…

离线部署docker中的containerd服务

containerd 是一个行业标准的容器运行时,专注于简单、健壮的容器执行。它是从 Docker 中分离出来的项目,旨在作为一个底层的运行时接口,供更高层次的容器管理层使用。 containerd 负责镜像传输、存储、容器执行、网络配置等工作。它向上为 Do…

web布局15

CSS 网格布局除了提供定义网格和放置网格项目的相关属性之外,也提供了一些控制对齐方式的属性。这些控制对齐方式的属性,和 Flexbox 布局中的对齐属性 justify-* 、align-* 、*-items 、*-content 、 *-self 等是相似的: 在网格布局中可以用它…

leetcode 291. Word Pattern II和290. Word Pattern

目录 291. Word Pattern II 290. Word Pattern 291. Word Pattern II 回溯法哈希表 class Solution {unordered_map<char,string> hashmap;unordered_set<string> wordset; public:bool wordPatternMatch(string pattern, string s) {return backtrack(pattern,…

大模型的开发应用(十三):基于RAG的法律助手项目(上):总体流程简易实现

RAG法律助手项目&#xff08;上&#xff09;&#xff1a;总体流程简易实现 1 项目介绍1.1 方案选型1.2 知识文档 2 文档解析3 知识库构建3.1 构建知识节点3.2 嵌入向量初始化3.2 向量存储 4 查询4.1 初始化大模型4.2 模型响应4.2 本文程序存在的问题 完整代码 1 项目介绍 本项…

覆盖迁移工具选型、增量同步策略与数据一致性校验

1 引言 在当今数据驱动的时代&#xff0c;数据迁移已成为系统迭代、数据库升级、云迁移和架构演进中的关键环节。根据Gartner的调研&#xff0c;超过70%的企业级数据迁移项目因工具选择不当或同步策略缺陷而延期或失败。数据迁移不仅仅是简单的数据搬运&#xff0c;而是涉及数…