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;
};