C++ C++;将具有非常相关数据的类树拆分为两个类
我有一个类C++ C++;将具有非常相关数据的类树拆分为两个类,c++,architecture,tree,C++,Architecture,Tree,我有一个类树: 类树{ 在树上串; 向量非常重要; 树*leftChild; 树*rightChild; ... void veryiimportantmethod(){ //关于树的更改和使用 //更改和使用非常重要的信息 } }; aboutTree和veryImportantInfo不是常数,但对于树的所有节点都是相同的,我不想在所有节点中复制它。我想要这样的东西: 类树{ //在树上串; //向量非常重要; 树*leftChild; 树*rightChild; ... void ver
树
:
类树{
在树上串;
向量非常重要;
树*leftChild;
树*rightChild;
...
void veryiimportantmethod(){
//关于树的更改和使用
//更改和使用非常重要的信息
}
};
aboutTree
和veryImportantInfo
不是常数,但对于树的所有节点都是相同的,我不想在所有节点中复制它。我想要这样的东西:
类树{
//在树上串;
//向量非常重要;
树*leftChild;
树*rightChild;
...
void veryiimportantmethod(){
//关于树的更改和使用
//更改和使用非常重要的信息
}
};
类树包装器{
在树上串;
向量非常重要;
树根;
...
};
但这不起作用,因为我无法访问
TreeWrapper
的非静态字段。我想出了一个可能的粗略解决方案,就是让所有分支链接回包装器并直接访问数据:
注意:我用Tree
替换了TreeWrapper
,用branch
替换了Tree
,因为这对我来说更有意义
类树
{
公众:
结构分支
{
分支*leftChild;
分支机构*rightChild;
树*父;
void veryiimportantmethod(){
//更改并使用父级->关于树
//更改并使用父级->非常重要的信息
}
};
tree(){root.parent=this;}
树根;
在树上串;
向量非常重要;
};
无论何时创建新的分支
,都需要有leftChild->parent=parent代码>。您还需要定义branch
的成员函数,就像在双链接列表中一样
另一个解决方案是使用实际的双链接列表格式。所以tree*parent
将是branch*parent
。从分支机构访问重要信息的速度不会像上面那样快,但这意味着它将更易于导航。你可以更容易地绕着树往上走。(实际上,同时拥有树*根
和分支*父
可能不是个坏主意。但更详细的细节取决于您。)您能在主
函数中显示您的代码吗?非常感谢!我使用了你的第一个解决方案。
class tree
{
public:
struct branch
{
branch* leftChild;
branch* rightChild;
tree* parent;
void veryImportantMethod() {
// change and use parent->aboutTree
// change and use parent->veryImportantInfo
}
};
tree() { root.parent = this; }
tree root;
string aboutTree;
vector<int> veryImportantInfo;
};