[英]class/struct design; inheritance vs forward declaration
我无法理解何时/是否应该使用单/多继承vs前向声明我想在下面的示例中更好地理解它。 如果有人可以指出我正确的方向,或解释他们之间的差异,那将是非常值得赞赏的。
以下是我正在处理的数据结构示例;
存在1个Parent,1个SubParent和许多不同的 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;
};
谢谢。
编辑:父母的主要工作; 维护有关文件的信息,即SubParent的位置,SubParent大小,包括self在内的所有数据的总大小。 SubParent的主要工作; 包含有关儿童的信息,即儿童的大小和位置。 除了保持这些项目最新之外,Parent / SubParent都没有做太多其他事情。
我建议采用第一种方法,并进行以下更改:
在SubParent
中添加指向Parent
的成员。 这将允许您以两种方式遍历对象。
class SubParent { ... int iSubParent; Parent* parent; std::list<Children> childrenList; };
如果你想要有不同类型的Children
你应该在SubParent
保留一个Children*
列表,而不是Chilren
列表。 如果Children
永远不会有任何子课程,那么拥有一份Children
名单就足够了。
在Children
添加指向SubParent
的指针。 同样,这将允许您以两种方式遍历对象。 给定一个Children
,你将能够通过该指针访问其兄弟姐妹。
class Children { ... int iChild; int ChildType; SubParent* subParent; char *pData; };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.