类继承或嵌套类,哪个更好?

时间:2014-02-17 19:26:38

标签: c++ class inheritance

我有一个问题,我有那些类,现在有效,因为我公开了属性,但是如果我把它私有,或保护并继承到第二类,它不起作用,如何我能做到吗?

template <typename T>
class BinaryNode
{
public:
    T key;
    BinaryNode<T>* left;
    BinaryNode<T>* right;
    BinaryNode<T>* parent;
    BinaryNode(){}
    ~BinaryNode(){}
};

而且:

template <typename T>
class BinarySearchTree
{
private:
    BinaryNode<T>* root;
    BinaryNode<T>* newNode(T key);

    BinaryNode<T>* minimum(BinaryNode<T>* node);
    BinaryNode<T>* maximum(BinaryNode<T>* node);
    BinaryNode<T>* successor(BinaryNode<T>* node);

    void insert(BinaryNode<T>** node, T key);
    BinaryNode<T>* search(BinaryNode<T>* node, T key);
    void distance(BinaryNode<T>* node, T key);
    void inorderTreeWalk(BinaryNode<T>* node);
public:
    BinarySearchTree();
    ~BinarySearchTree();

    void insert(T key);
    BinaryNode<T>* search(T key);
    void distance(T key);
    void inorderTreeWalk();

    BinaryNode<T>* remove(BinaryNode<T>* node);
};

2 个答案:

答案 0 :(得分:0)

看起来节点与树紧密耦合:

您可以使树成为节点的朋友或使用嵌套类:

class Node {
    private:
    friend class Tree;
    ...
};

class Tree {
    ...
};

class Tree {
    private: // maybe protected
    class Node {
        public:
        ...
    };
};

答案 1 :(得分:0)

您可以为节点创建可访问的“getter”函数,以便您可以遍历二叉搜索树中的树。

template <typename T>
class BinaryNode
{
private:
    T key;
    BinaryNode<T>* left;
    BinaryNode<T>* right;
    BinaryNode<T>* parent;
public:
    BinaryNode(){}
    ~BinaryNode(){}

    T const& getKey() const { return key; }
    const BinaryNode<T>* getLeft() const { return left; }
    const BinaryNode<T>* getRight() const { return right; }
    const BinaryNode<T>* getParent() const { return parent; }
};

现在BinarySearchTree<T>可以遍历树进行搜索,而无需直接访问成员或能够修改它们。

当然,您可能也想要一些方法来修改值(设置函数)