繁体   English   中英

类/结构设计; 继承与前向声明

[英]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都没有做太多其他事情。

我建议采用第一种方法,并进行以下更改:

  1. SubParent中添加指向Parent的成员。 这将允许您以两种方式遍历对象。

     class SubParent { ... int iSubParent; Parent* parent; std::list<Children> childrenList; }; 
  2. 如果你想要有不同类型的Children你应该在SubParent保留一个Children*列表,而不是Chilren列表。 如果Children永远不会有任何子课程,那么拥有一份Children名单就足够了。

  3. Children添加指向SubParent的指针。 同样,这将允许您以两种方式遍历对象。 给定一个Children ,你将能够通过该指针访问其兄弟姐妹。

     class Children { ... int iChild; int ChildType; SubParent* subParent; char *pData; }; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM