C++ 如何决定哪些方法属于哪里?C++;

C++ 如何决定哪些方法属于哪里?C++;,c++,C++,我完成了AVL树的编写,编程时困扰我的一件事是决定哪些方法属于哪个类: template <class ValueType,class CompareFunction> class avlTree{ class avlTreeException{}; public: class ElementDoesntExist : public avlTreeException{}; class EmptyTree : public avlTreeException{};

我完成了AVL树的编写,编程时困扰我的一件事是决定哪些方法属于哪个类:

template <class ValueType,class CompareFunction>
class avlTree{
    class avlTreeException{};
public:
    class ElementDoesntExist : public avlTreeException{};
    class EmptyTree : public avlTreeException{};
    class ElementAlreadyExists : public avlTreeException{};
private:
    class Node{
        friend class avlTree;
        ValueType* data;
        Node *sonA,*sonB,*dad;
        int height,balance;
private:
CompareFunction compare;
int treeSize;
Node* root;
};
但是,我可以将
destroyNodeTree()

我在决定方法
findNode(const ValueType&)
应该放在哪里时遇到了类似的问题,这意味着它显然是树的公共方法,但我是否应该为具有相同名称的节点创建一个方法,并让树函数调用根上的节点方法?使用相同名称的公共函数和内部类方法是否可以接受

在我看来,最好将其作为节点方法,因为这样可以提供更大的灵活性(我将能够仅在某个节点下搜索节点),但另一方面,这意味着该方法要么需要创建
类compare
的实例,要么让每个节点保留一个实例的副本,或者将
类比较
作为静态函数。但在我看来,这三种方法都有一个缺点:创建一个实例可能代价高昂,保存一个副本可能代价高昂,强迫用户将函数设置为静态对我来说似乎并不合适(但我非常缺乏经验,所以如果我错了,请修复我)

在任何情况下,我最终使findNode仅成为一个treeffunction,而不是一个方法(硬件分配不需要树来从特定节点进行搜索,因此它在那里没有任何区别),但我不想编写糟糕的代码


总之,我们如何决定在何处保存用户的性能、内存和灵活性(他更愿意从任何节点进行搜索还是创建非静态比较函数?

我知道一件事,我没有阅读所有这些内容,在类中创建类的原因是什么?你是想让一个对象包含另一个类的对象吗?@FirstStep很抱歉问了这么长的问题,我描述了我所面临的确切问题,如果能回答标题中提出的问题,而不包括我所涉及的细节,我将不胜感激。@FirstStep我不明白你在问什么,你能澄清一下吗?
template <class ValueType,class CompareFunction>
void avlTree<ValueType,CompareFunction>::avlTree::destroyNodeTree(Node* rooty) {
    if(!rooty){
        return;
    }
    Node *A=rooty->sonA,*B = rooty->sonB;
    destroyNodeTree(A);
    destroyNodeTree(B);
}