「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战」
💦 访问限定符
C++ 实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
❗ 访问限定符说明 ❕
1️⃣ public 修饰的成员在类外可以直接被访问
2️⃣ protected 和 private 修饰的成员在类外不能直接被访问 (此处 protected 和 private 是类似的,它俩的区别要在继承才能体现)
3️⃣ 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止
4️⃣ class 的默认访问权限为 private,struct 为 public (因为 struct 要兼容 C)
class Stack
{
//想在类外直接访问的定义成公有
public:
void Init(){}
void Push(int x){}
void Pop(){}
void Destory(){}
//不想在类外直接访问的定义成私有
private:
int* a;
int top;
int capacity;
};
❓ C++ 中 struct 和 class 的区别 ❔
C++ 需要兼容 C 语言,所以 C++ 中 struct 可以当成结构体去使用。另外 C++ 中 struct 还可以用来定义类。和 class 定义类是一样的,目前区别是 struct 的成员默认访问方式是 public,class 的成员默认访问方式是 private (后面继承还有一点区别)。
❓ 在C++中struct可以当结构体也可以定义类,客观来说容易混淆,也没必要,C++为啥不修改呢 ❔
早期的语法设计出来时,可能想的不全面,留下了一些坑,经过时间的推移,后面就不敢修改,因为这段时间可能用留下坑的语法写了大量的代码,你说你突然不支持旧语法了,虽然对新用户没啥,但对老用户打击却很大,大多数语言都是这样,这是语言的一个缺陷。历史上只有一个语言干过这种事 —— python,python3 和 python2 互不兼容
💦 封装
面向对象的三大特性:封装、继承、多态。这里只是最出名的三大特性,其实严格来说不止三大特性 —— 抽象、反射(java) 等
❓ 在类和对象阶段,我们只研究类的封装特性,那什么是封装呢 ❔
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
封装本质上是一种管理:比如西安的兵马俑,如果什么都不管,那么兵马俑可能会被破坏 (只是建议你不要破坏,但是你要破坏那也没办法);所以必须得改进,我们首先建了一座房子把兵马俑给封装起来,但是我们目的不是全封装起来,不让别人看,所以我们开放了售票通道,可以买票突破封装在合理的监管机制下进去参观。类也是一样,我们使用类数据和方法都封装到一下。不想给别人看到的,我们使用 protected/private 把成员封装起来。开放一些共有的成员函数对成员合理的访问。所以封装本质是一种管理。
❓ 封装好还是不封装好 ❔
【例子参考上面的兵马俑】 不封装虽然比较自由,可以随便访问数据和方法,但是可能会付出代价 —— 人需要规范操作,且都能恪守规则。 封装就是强制你恪守规则