我很难理解何时/是否应该使用单继承/多继承与正向声明,我想在以下示例中更好地理解它。如果有人能指出我正确的方向,或解释他们之间的差异,那将是无比感激的。
以下是我正在处理的数据结构的示例;
存在1个“父级”,1个“子级”和许多种不同的子级类型。即每个 parent 每个子 parent 有很多 child 。一些 child 需要访问其他 child 对象。 children 将使用彼此相似的功能,即ParseSelf / Display / Save / Edit。如果更改了子项(即“编辑/保存”),则还需要更新SubParent,Parent和其他子项中的数据。
我想知道实现这样的最佳方法是什么?我在下面提出了两种选择。如果需要更多说明/信息,请告诉我。
class SubParent;
class Children;
class Parent
{
...
int iParent;
SubParent *pSubParent;
};
class SubParent
{
...
int iSubParent;
std::list<Children> childrenList;
};
class Children
{
...
int iChild;
int ChildType;
char *pData;
};
与;
class Parent
{
...
int iParent;
};
class SubParent : public Parent
{
...
int iSubParent;
};
class Children : public SubParent
{
...
int iChild;
int ChildType;
char *pData;
};
谢谢。
编辑:
parent 的主要工作;维护有关文件的信息,即SubParent的位置,SubParent大小,包括自身在内的所有数据的总大小。
SubParent的主要工作;包含有关 child 的信息,即 child 的大小和位置。
除了使这些项目保持最新之外, parent /子 parent 都没有做很多其他事情。
最佳答案
我建议采用第一种方法,并进行以下更改:
SubParent
中添加一个指向Parent
的成员。这将允许您双向遍历对象。class SubParent
{
...
int iSubParent;
Parent* parent;
std::list<Children> childrenList;
};
Children*
,则应在SubParent
中保留一个Chilren
列表,而不是Children
列表。如果Children
永远不会有任何子类,那么拥有Children
列表就足够了。 SubParent
中添加一个指向Children
的指针。同样,这将使您可以双向遍历对象。给定一个Children
,您将能够通过该指针访问其 sibling 。class Children
{
...
int iChild;
int ChildType;
SubParent* subParent;
char *pData;
};