Класс наследования или вложенный класс, что лучше?

У меня есть проблема, у меня есть этот класс, который теперь работает, потому что у меня есть атрибут public, но если я помещу его в приватный или защищенный и унаследованный для второго класса, он не работает, как я могу это сделать Это?

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

0

Решение

Похоже, что узел тесно связан с деревом:

Вы можете сделать дерево другом узла или использовать вложенный класс:

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

class Tree {
...
};

или же

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

Другие решения

Вы могли бы сделать доступными функции «получения» для узлов, чтобы вы могли проходить по дереву в вашем бинарном дереве поиска.

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> может проходить через дерево, чтобы выполнять поиск, не имея прямого доступа к членам или не имея возможности изменять их.

Конечно, вам, вероятно, понадобятся некоторые методы для изменения значения (функции set)

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector