Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类/结构设计;继承与转发声明_C++_Class_Inheritance_Forward Declaration - Fatal编程技术网

C++ 类/结构设计;继承与转发声明

C++ 类/结构设计;继承与转发声明,c++,class,inheritance,forward-declaration,C++,Class,Inheritance,Forward Declaration,我很难理解何时/是否应该使用单继承/多继承还是前向声明&我希望在下面的示例中更好地理解它。如果有人能给我指出正确的方向,或者解释他们之间的差异,那将是非常感激的 下面是我正在处理的数据结构示例 存在1个父项、1个子项和许多不同的子项类型。(每个子父母都有很多孩子)。某些子对象需要访问其他子对象。孩子们将使用彼此相似的功能,如解析自我/显示/保存/编辑。如果子项发生更改(即编辑/保存),还需要更新子项、父项和其他子项中的数据 我想知道什么是最好的方式来实现这样的东西?我在下面提出了两种选择。如果需

我很难理解何时/是否应该使用单继承/多继承还是前向声明&我希望在下面的示例中更好地理解它。如果有人能给我指出正确的方向,或者解释他们之间的差异,那将是非常感激的

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

存在1个父项、1个子项和许多不同的子项类型。(每个子父母都有很多孩子)。某些子对象需要访问其他子对象。孩子们将使用彼此相似的功能,如解析自我/显示/保存/编辑。如果子项发生更改(即编辑/保存),还需要更新子项、父项和其他子项中的数据

我想知道什么是最好的方式来实现这样的东西?我在下面提出了两种选择。如果需要更多的澄清/信息,请让我知道

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 SubParent
    {
        ...
        int iSubParent;
        Parent* parent;
        std::list<Children> childrenList;
    };
    

  • 你说的是继承与组合。关于这些类应该做什么,您还没有给我们提供足够的信息,但是您的第一种方法可能更好。@Beta我将编辑我的问题以添加关于这方面的额外信息。不确定您想做什么。在编写任何类或接口之前,一定要先在main中编写示例用法代码。我看不到任何迹象表明
    子类
    在任何方面“都是”
    子类
    ,或
    父类
    ,所以我不明白为什么还要考虑继承。如果
    SubParent
    应该包含
    子对象的
    std::list
    ,那么继承将不能替代它。只是看起来很奇怪。另一方面,如果您发现自己需要像
    ChildType
    这样的成员,这可能表明多态性可能是该部分更好的解决方案。此外,在第一个示例中,您可以通过以相反顺序定义类来避免向前声明。请参阅,如果类是以相反顺序而不是使用向前声明,那么这种方法(即使用指针)仍然是必要的吗?@ReturnVoid我没有回答这个问题。@R Sahu不介意,在重读了几遍你的帖子后,我明白了。
    class SubParent
    {
        ...
        int iSubParent;
        Parent* parent;
        std::list<Children> childrenList;
    };
    
    class Children
    {
        ...
        int iChild;
        int ChildType;
        SubParent* subParent;
        char *pData;
    };