2012-07-11 109 views
3

子对象和包含对象的有什么区别?为了构造从另一个类派生的类的实例,首先必须创建子对象,然后必须创建派生对象。子对象和包含对象之间的区别

问题:

  1. 这是真的,派生类对象包含子对象?

  2. 一个如何可视化对象的结构上的差异

    a)含有另一个目的

    b)中,其从另一个类

    衍生执行中所涉及的对象)和b)具有相同的结构?

回答

4

是的,派生对象包含其基类子对象的实例。

物理上,包含对象(作为成员)和派生自对象之间确实没有区别。此外,该语言同时指代子对象:基类子对象和成员子对象。

虚拟继承通常会引入一些额外的家庭数据,这使得它比“包含”基本子对象更复杂,但普通继承通常归结为简单的“包含”。

派生和包含作为成员之间的区别确实只存在于概念层面。不同的访问语法,不同的功能。例如,派生参与多态这样的语言特征。

1

是的,派生对象包含子对象。这样说并不是错的。虽然派生更多一点。数据成员和方法可以直接访问。虚拟功能需要VMT中的插槽。所有这些在包含对象时都不会发生。

可视化差异。没有普遍接受的方式来做到这一点。从内存布局的角度来看,差异在VMT中。包含的对象有自己的VMT字段(如果有的话)。派生对象具有自己的VMT,它通过添加新条目并替换一些条目而在基础对象的VMT之外创建。

2

在C++中,区别在于虚拟方法。派生类可以重新定义基础子对象的虚拟方法。包含的对象就像它一样。这或多或少是基里尔的回答 - 但我希望能有一个简单的答案。

相关问题