一个内部表示不向用户公开并且可以透明地更改的类,这个例子是什么?

时间:2013-09-20 23:39:50

标签: c++ inheritance polymorphism encapsulation

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

这是推导,抽象,多态,封装,继承的一个例子吗?

我认为这是封装。

成员数据是私有的,不向用户公开,但可以通过成员函数进行更改。

正确吗?

2 个答案:

答案 0 :(得分:1)

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

至于此:

  

成员数据是私有的,不会向用户公开,但可以通过成员函数进行更改。

如果这是一个真/假问题,并且你逐字复制了它,那么答案是错误的。课程的数据成员可以是公开的。如果句子的开头应该有“if”,则答案变为true。

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

答案 1 :(得分:0)

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

  

这是推导,抽象,多态,封装,继承的一个例子吗?

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

'抽象'在这里不是指抽象类,而是更普遍地引用abstraction,这比隐藏内部细节要宽得多,以使实现代码透明地变化。

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

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

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

  

成员数据是私有的,不会向用户公开,但可以通过成员函数进行更改。

     

正确吗?

如果您指的是成员函数访问数据成员的权限并修改其值,那么“内部表示[...]可能会透明地改变”而不是问题的含义。

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