我无法理解何时/是否应该使用单/多继承与前向声明&我想在下面的例子中更好地理解它。如果有人可以指出我正确的方向,或解释他们之间的差异,那将非常感激。
以下是我正在处理的数据结构示例;
存在1个Parent,1个SubParent&许多不同儿童类型。即每个父母每个子父母有很多子女。有些孩子需要访问其他儿童对象。孩子们将使用相似的功能,即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;
};
谢谢。
编辑: 家长的主要工作;维护有关文件的信息,即SubParent的位置,SubParent大小,包括self在内的所有数据的总大小。 SubParent的主要工作;包含有关儿童的信息,即尺寸和尺寸。儿童的位置。 除了将这些项目保持最新之外,Parent / SubParent实际上并没有做太多其他事情。
答案 0 :(得分:1)
我建议采用第一种方法,并进行以下更改:
在SubParent
中添加指向Parent
的成员。这将允许您双向遍历对象。
class SubParent
{
...
int iSubParent;
Parent* parent;
std::list<Children> childrenList;
};
如果您要使用不同类型的Children*
,则应在SubParent
中保留Chilren
的列表,而不是Children
的列表。如果Children
永远不会有任何子类,那么列出Children
就足够了。
在SubParent
中添加指向Children
的指针。同样,这将允许您以两种方式遍历对象。给定Children
,您将能够通过该指针访问其兄弟姐妹。
class Children
{
...
int iChild;
int ChildType;
SubParent* subParent;
char *pData;
};