0

C++中,其内部表示不向用户公开并且可以透明地更改的类。

这是派生、抽象、多态、封装、继承的一个例子?

我认为是封装。

成员数据是私有的,不暴露给用户,但可以通过成员函数进行更改。

正确的 ?

4

2 回答 2

1

第一个(家庭作业)问题似乎是封装和抽象的一个例子。谁知道你的老师期望什么?

至于这个:

成员数据是私有的,不暴露给用户,但可以通过成员函数进行更改。

如果这是一个真/假问题,并且您将其逐字复制,那么答案是错误的。类的数据成员可以是公共的。如果句子的开头应该有一个“如果”,那么答案就会变为真。

如果您要发布家庭作业问题,那么在转录阶段引入歧义和语法错误确实没有任何借口。

于 2013-12-27T03:52:52.880 回答
0

预期的答案显然是“封装”。

这是派生、抽象、多态、封装、继承的一个例子?

派生和继承很容易被排除;它们可能用于构造代码,因此很容易更改类的内部表示,但问题中没有任何东西需要它们。

这里的“抽象”不是指抽象类,而是更一般地指抽象,它比隐藏内部细节以使实现代码能够透明地变化要广泛得多。

多态性也不是正确的答案,但是多态性和封装之间的关系可能会让一些人在选择它时感到困惑。

封装是将代码分为“内部”细节和“外部”代码,两者由接口分隔。多态性是一种特殊机制,用于在通过特定变量访问接口时选择或设置可操作的实现。所以很明显,多态性依赖于封装,将访问多态变量的“外部”代码与实现分开,但封装不必在多态上下文中使用。

因此,在这里重申了封装的定义并澄清了它与多态性的关系,很明显问题是在这些术语中唯一地识别封装。

成员数据是私有的,不暴露给用户,但可以通过成员函数进行更改。

正确的 ?

如果您指的是成员函数访问数据成员并修改其值的权限,那么“内部表示 [...] 可以透明地更改”并不是问题中的意思。

它们的意思是可以重写对应于隐藏的内部细节的源代码,而无需重写任何对应于外部代码的源代码。例如,如果您设计了一个封装其数据的 2d 向量,那么您可以自由地重写其实现(成员数据和成员函数)以在使用笛卡尔坐标和使用 rho-theta 表示之间切换;“外部”代码根本不需要更改。

于 2013-12-27T05:23:37.017 回答