每日一言
你解决的每一个难题,都是在为未来的自己解锁新技能。
权限的讲解
这边呢我们利用银行的一个案例来讲解权限的奥秘 权限指的是public、private 、protected 就是这三种权限,因此有这一张表进行分清他们之间的区别和联系
但是我们在平时的话会因为项目不够大的情况下我们看不出来权限的威力,也就是我们现在还在学习语法阶段,真的很难去体会到权限的作用,真正的作用,这边我利用了一个银行的案例,来初识权限
就是我们一般去银行取钱存钱的操作,是不能直接操作账户(意思就是不能直接冲进银行把钱修改成1亿的)的,我们作为用户只能通过银行做的公共的接口来与银行的数据做交互,比如ATM机和柜台进行操作(类比接口),所以我们这边就等于是,银行的类的属性是私有的,只有银行内部可以修改,我们作为外部用户的人,只能通过银行的public的函数进行修改银行的数据
这个是和现实案例挂钩的,所以这样才能知道为什么要这样做,权限的作用
总结:
银行场景 | 面向对象编程 | 核心作用 |
银行账户数据(余额、密码) | 类的私有属性(Private Fields) | 隐藏内部实现细节,防止外部非法修改 |
ATM 机、柜台 | 类的公共方法(Public Methods) | 作为外部访问的唯一通道,控制数据操作的合法性 |
密码验证、余额检查 | 方法内部的业务逻辑 | 确保数据操作符合规则(如 “不能取负数”“密码正确”) |
用户(你) | 类的调用者(Client) | 只能通过公共接口与类交互,无法直接操作内部数据 |
- 也就是我们外部的人无需知道这个ATM机是怎么实现的,只需要调用即可
- 外部人员只能操作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写成全局变量