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

时间:2014-04-25 03:46:57

标签: c++ class inheritance forward-declaration

我无法理解何时/是否应该使用单/多继承与前向声明&我想在下面的例子中更好地理解它。如果有人可以指出我正确的方向,或解释他们之间的差异,那将非常感激。

以下是我正在处理的数据结构示例;

存在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实际上并没有做太多其他事情。

1 个答案:

答案 0 :(得分:1)

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

  1. SubParent中添加指向Parent的成员。这将允许您双向遍历对象。

    class SubParent
    {
        ...
        int iSubParent;
        Parent* parent;
        std::list<Children> childrenList;
    };
    
  2. 如果您要使用不同类型的Children*,则应在SubParent中保留Chilren的列表,而不是Children的列表。如果Children永远不会有任何子类,那么列出Children就足够了。

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

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