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