gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:04:15 24 4
gpt4 key购买 nike

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

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

存在 1 个父项、1 个子父项和许多不同 子项类型。即每个 parent 每个子 parent 有很多 child 。一些 Children 需要访问其他 Children 对象。 children 将使用彼此相似的功能,即 ParseSelf/Display/Save/Edit。如果 Children 发生变化(即编辑/保存),还需要更新 SubParent、Parent 和可能的其他 Children 中的数据。

我想知道实现此类功能的最佳方式是什么?我在下面提出了两种选择。如果需要更多说明/信息,请告诉我。

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 大小、包括自身在内的所有数据的总大小。SubParent的主要工作;包含有关 child 的信息,即 child 的大小和位置。除了使这些项目保持最新之外, parent /子 parent 实际上并没有做太多其他事情。

最佳答案

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

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

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

  3. Children 中添加指向 SubParent 的指针。同样,这将允许您双向遍历对象。给定一个 Children,您将能够通过该指针访问它的 sibling 。

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

关于c++ - 类/结构设计;继承与前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23283798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com