c++ - 很难理解封装

标签 c++ encapsulation

我只是……不太确定我理解封装。也许这可能与我仍在类里面学习编程并且还没有做出任何类似的事实有关......供其他人使用的真实世界程序,但我只是不明白它试图完成什么.我知道它限制了对某些类成员和函数的访问。但是就像..限制它来自谁?我见过几个例子,它们有一个私有(private)数据成员,但它们有公共(public)的 get 或 set 方法,无论如何都允许对数据成员进行操作。那么是如何限制或隐藏的呢?

我的书是这样说的:

" 封装提供了两个重要的优势:

  1. 用户代码不能无意中破坏封装对象的状态。
  2. 封装类的实现可以随时间变化,而无需更改用户级代码。 "

我想我对他们使用的词语感到困惑。用户代码如何可能破坏对象的状态,或者有人可以给我举个例子吗?

我知道我的问题有点到处都是,但在考虑封装时我的想法也是如此,所以我很难封装我对它的所有想法 (..lol)

最佳答案

我最喜欢的封装示例是驾驶汽车。

典型的驾驶员知道如何通过打开点火装置并踩下 throttle 踏板来使汽车前进。他们不需要了解任何关于内燃机燃烧的知识就可以每天早上上类。

throttle 踏板提供了一个非常简单的界面,用于操作非常复杂的机器。意思是,真正复杂的内部细节由驱动程序封装

现在,就代码而言,假设您想使用某种Map,但您不知道如何为您的键编写通用哈希函数,或者如何实现任何其他基础细节。

在 Java 中,您可以简单地使用 HashMap,而不必担心标准库在下面做了什么。这些详细信息封装来自用户。

关于c++ - 很难理解封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19534326/

相关文章:

c++ - 模块信息不适用于 DEBUG_PROCESS

c++ - 解释器开发期间解析 token 问题

c++ - 为 std::shared_ptr 分配内存的正确方法

c++ - 带有 char 值的 if 语句

java - 在 Java 中访问包私有(private)字段

python - 织物导入错误 : "fab task" vs. "from fabfile import task; task()"

c - 这个策略是为了避免 C 中的全局变量,对吗?

c++ - 字数统计程序 C++

c# - 使封装 List<> 的对象可通过 [] 运算符访问?

java - 我是否也应该将集合封装在 setter 中?