各位好友,欢迎来到本期博文 !下面,继续推进上一期内容 !

在上一期结尾之处,留下了一个悬念 !什么是 访问限定符 ?

1. 访问限定符

-----> C++实现封装的方式:用类将对象的属性与方法结合到一块,让对象更加完善,通过访问,限定性地选择接口 给外部用户使用。

下面来看有哪些 “访问限定符” :

-----> 三大访问限定符

C++ ---->类 ~~ 对象_02_计算 类的大小

-----> 访问限定符说明

1. public 修饰的成员在类外面可以直接访问;

2. protectprivate 修饰的成员在类外面不能被直接访问;

3. 访问权限作用域 从某一个访问限定符出现开始 直到下一个访问限定符出现为止;

4. 如果,类体中只出现一个 访问限定符,那么访问结束标志是到 “ } ” 为止;

5. class 默认访问权限是 “private” ,结构体 struct 默认访问权限是 “public” (因为 C++ 要兼容 C 语言)

注意:> 访问限定符只在编译时有用 ,当数据映射到内存之后,没有任何访问限定符上的区别。


--->封装 -->将数据和数据操作方法进行有机结合, 隐藏对象的属性和实现细节, 仅对外 公开接口 来与对象进行交互。封装的本质是一种管理,让用户更加方便 去使用类。 C++ 中实现封装, 类 的意义便彰显于此 !因此 C++

中引入了一种新的域,叫做类域 !标志关键字 “class” 上一期已经提及过了 !

2. 类的实例化

-----> 用类创建对象的过程,称为类的实例化

(1)类是对 对象进行描述,只是一个模型 !请注意:> 类并没有 分配到实际的内存空间 来存放自己 !

(2)那么定义类之后,实际中,占据空间内存的是什么呢 ?

----> 实例化的对象,占据实际的物理空间,用来存储类成员变量

如下所示:>


C++ ---->类 ~~ 对象_02_特殊类 空类_02

请仔细观察,上述代码,有红色警告  ! 是由于 类并不具有空间 ,只有类实例化的对象才具有空间 !

为了方便好友理解!类 只是一种设计 !现 打个比方,一栋漂亮的房子,肯定有设计图纸,而设计图纸就好比 类,并不具有空间;反而,按照图纸,建造出的房子具有真正的空间 !而那些房子正是 实例化的对象 !如此理解,是不是更加形象,更加直观一些呢?😊

那么,上述代码,该如何修改呢 ?下面是修改版本 :>

C++ ---->类 ~~ 对象_02_特殊类 空类_03

各位好友,是不是同结构体很相似 !其实 本质上,二者都是在设计成员 !只不过,类 的设计更加广泛,涵盖面不仅仅是局限于变量 !在这一点上,结构体,望尘莫及啊 !😊

3. 类对象模型图

-----> 类的存储方式

为了方便好友理解,现定义一个类体,并附上彩色代码图样 :>

C++ ---->类 ~~ 对象_02_类实例化 对象_04


---> 方式一 :

a.  对象中包含 类的所有成员

C++ ---->类 ~~ 对象_02_特殊类 空类_05

缺陷 : 每个对象中的成员变量是不同的,但是调用同一个函数 !如果按照此种方式进行存储,当一个类创建多个对象的时候,每个对象都会保存一份代码,相同的代码保存多次,浪费空间。显然,上述设计方案并不可行 !

---> 方式二 :

b.  保存一份代码,在对象中保存 存放代码的地址

C++ ---->类 ~~ 对象_02_三大访问限定符_06

其实,上述 存储设计二,同方式一 实现原理是相同的,只是将多个函数用函数表封装,本质上并没有什么变化 !

结论,此方案不可行 !

---> 方式三 :

c.  只保存成员变量,成员函数存放在公共的代码区域😊

C++ ---->类 ~~ 对象_02_类 存储方式比较_07

经过分析,前面两种存储设计,显然不可行 !只剩下,第三种设计方案了,那么该如何验证其正确性?

下面是探讨过程,仍然用彩色图示进行讲解 !

----->验证方法:计算 -->类的大小

C++ ---->类 ~~ 对象_02_三大访问限定符_08

请注意,观察上述红色框框。 由此可知,设计方案三,正是 类对象的存储方式 !

另外,还有一种特殊模型需要提及一下 !

-----> 空类 ---> 大小:1 个字节

C++ ---->类 ~~ 对象_02_三大访问限定符_09

结论 :> 一个类的大小,实际上是该类的 成员变量总和,当然了,这需要注意内存对齐 !

同时探讨类的大小的时候,空类比较特殊,编译器给空类,赋予一个字节的大小 !意即,空类 这个对象是站位的

表示存在 !

本期提及到了 内存对齐 !下一期,会对内存对齐进行详细讲解 !

其实,这属于 C 语言部分 --->结构体 !另外,下一期,将对 “ this ” 指针进行开战 !其实 “ this ” 指针有许多好玩的新点 !至此,本期内容已完结 !期待下一期的相见!吾在 C++ 领域 等你来 !😊😊