各位好友,欢迎来到本期博文 !下面,继续推进上一期内容 !
在上一期结尾之处,留下了一个悬念 !什么是 访问限定符 ?
1. 访问限定符
-----> C++实现封装的方式:用类将对象的属性与方法结合到一块,让对象更加完善,通过访问,限定性地选择接口 给外部用户使用。
下面来看有哪些 “访问限定符” :
-----> 三大访问限定符
-----> 访问限定符说明
1. public 修饰的成员在类外面可以直接访问;
2. protect, private 修饰的成员在类外面不能被直接访问;
3. 访问权限作用域 从某一个访问限定符出现开始 直到下一个访问限定符出现为止;
4. 如果,类体中只出现一个 访问限定符,那么访问结束标志是到 “ } ” 为止;
5. class 默认访问权限是 “private” ,结构体 struct 默认访问权限是 “public” (因为 C++ 要兼容 C 语言)
注意:> 访问限定符只在编译时有用 ,当数据映射到内存之后,没有任何访问限定符上的区别。
--->封装 -->将数据和数据操作方法进行有机结合, 隐藏对象的属性和实现细节, 仅对外 公开接口 来与对象进行交互。封装的本质是一种管理,让用户更加方便 去使用类。 C++ 中实现封装, 类 的意义便彰显于此 !因此 C++
中引入了一种新的域,叫做类域 !标志关键字 “class” 上一期已经提及过了 !
2. 类的实例化
-----> 用类创建对象的过程,称为类的实例化
(1)类是对 对象进行描述,只是一个模型 !请注意:> 类并没有 分配到实际的内存空间 来存放自己 !
(2)那么定义类之后,实际中,占据空间内存的是什么呢 ?
----> 实例化的对象,占据实际的物理空间,用来存储类成员变量
如下所示:>
请仔细观察,上述代码,有红色警告 ! 是由于 类并不具有空间 ,只有类实例化的对象才具有空间 !
为了方便好友理解!类 只是一种设计 !现 打个比方,一栋漂亮的房子,肯定有设计图纸,而设计图纸就好比 类,并不具有空间;反而,按照图纸,建造出的房子具有真正的空间 !而那些房子正是 实例化的对象 !如此理解,是不是更加形象,更加直观一些呢?😊
那么,上述代码,该如何修改呢 ?下面是修改版本 :>
各位好友,是不是同结构体很相似 !其实 本质上,二者都是在设计成员 !只不过,类 的设计更加广泛,涵盖面不仅仅是局限于变量 !在这一点上,结构体,望尘莫及啊 !😊
3. 类对象模型图
-----> 类的存储方式
为了方便好友理解,现定义一个类体,并附上彩色代码图样 :>
---> 方式一 :
a. 对象中包含 类的所有成员
缺陷 : 每个对象中的成员变量是不同的,但是调用同一个函数 !如果按照此种方式进行存储,当一个类创建多个对象的时候,每个对象都会保存一份代码,相同的代码保存多次,浪费空间。显然,上述设计方案并不可行 !
---> 方式二 :
b. 保存一份代码,在对象中保存 存放代码的地址
其实,上述 存储设计二,同方式一 实现原理是相同的,只是将多个函数用函数表封装,本质上并没有什么变化 !
结论,此方案不可行 !
---> 方式三 :
c. 只保存成员变量,成员函数存放在公共的代码区域😊
经过分析,前面两种存储设计,显然不可行 !只剩下,第三种设计方案了,那么该如何验证其正确性?
下面是探讨过程,仍然用彩色图示进行讲解 !
----->验证方法:计算 -->类的大小
请注意,观察上述红色框框。 由此可知,设计方案三,正是 类对象的存储方式 !
另外,还有一种特殊模型需要提及一下 !
-----> 空类 ---> 大小:1 个字节
结论 :> 一个类的大小,实际上是该类的 成员变量总和,当然了,这需要注意内存对齐 !
同时探讨类的大小的时候,空类比较特殊,编译器给空类,赋予一个字节的大小 !意即,空类 这个对象是站位的
表示存在 !
本期提及到了 内存对齐 !下一期,会对内存对齐进行详细讲解 !
其实,这属于 C 语言部分 --->结构体 !另外,下一期,将对 “ this ” 指针进行开战 !其实 “ this ” 指针有许多好玩的新点 !至此,本期内容已完结 !期待下一期的相见!吾在 C++ 领域 等你来 !😊😊