在 C ++ 中,一个类,其内部表示不向用户公开,可以透明地更改。
这是推导,抽象,多态,封装,继承的一个例子吗?
我认为这是封装。
成员数据是私有的,不向用户公开,但可以通过成员函数进行更改。
正确吗?
答案 0 :(得分:1)
第一个(家庭作业)问题似乎是封装和抽象的一个例子。谁知道老师的期望?
至于此:
成员数据是私有的,不会向用户公开,但可以通过成员函数进行更改。
如果这是一个真/假问题,并且你逐字复制了它,那么答案是错误的。课程的数据成员可以是公开的。如果句子的开头应该有“if”,则答案变为true。
如果您要发布作业问题,那么在转录阶段引入歧义和语法错误确实没有借口。
答案 1 :(得分:0)
预期答案显然是“封装”。
这是推导,抽象,多态,封装,继承的一个例子吗?
很容易排除派生和继承;它们可能用于构造代码,因此很容易更改类的内部表示,但问题中没有任何内容需要它们。
'抽象'在这里不是指抽象类,而是更普遍地引用abstraction,这比隐藏内部细节要宽得多,以使实现代码透明地变化。
多态性也不是正确的答案,但多态性和封装之间的关系可能会使一些人对选择它感到困惑。
封装是将代码划分为“内部”细节和“外部”代码,两者由接口分隔。多态性是一种特殊的机制,用于选择或设置当通过特定变量访问接口时哪些实现可操作。所以很明显,多态性依赖于封装来划分从实现中访问多态变量的“外部”代码,但是封装不必在多态上下文中使用。
因此,在这里重述了封装的定义并澄清了它与多态性的关系,很明显这个问题是唯一地识别这些术语之间的封装。
成员数据是私有的,不会向用户公开,但可以通过成员函数进行更改。
正确吗?
如果您指的是成员函数访问数据成员的权限并修改其值,那么“内部表示[...]可能会透明地改变”而不是问题的含义。
它们的含义是可以重写与隐藏的内部细节相对应的源代码,而无需重写与外部代码相对应的任何源代码。例如,如果您设计了一个封装其数据的二维矢量,那么您可以自由地重写其实现(成员数据和成员函数),以便在使用笛卡尔坐标和使用rho-theta表示之间切换; “外部”代码根本不需要改变。