Для школьного проекта мне нужно создать BinarySearchTree для кортежа индекса и значения типа T, и я решил сделать это, используя левый и правый дочерние указатели (в других случаях, но не теряйте меня).
Чтобы сделать класс немного более реалистичным и читабельным, я построил 3 разных класса: Tree, BinaryTree и BinarySearchTree с наследованием.
Я объявил метод получения и установки левого и правого дочерних элементов в BinaryTreeкласс и класс выглядят так:
template <typename T>
class ArbreBinaire : public Arbre<T>
{
private:
ArbreBinaire<T>* _leftChild;
ArbreBinaire<T>* _rightChild;
public:
ArbreBinaire(lu index = 0, T element = T(0), ArbreBinaire<T>* lchild = nullptr, ArbreBinaire<T>* rchild = nullptr) :
Arbre<T>(index, element), _leftChild(lchild), _rightChild(rchild) {};
virtual ArbreBinaire<T>* getLC() const { return _leftChild; }
virtual ArbreBinaire<T>* getRC() const { return _rightChild;}
void setLC(ArbreBinaire<T>* lc) { _leftChild = lc; lc->setParent(this); }
void setRC(ArbreBinaire<T>* rc) { _rightChild = rc; rc->setParent(this); }
virtual ~ArbreBinaire() = default;
};
И в моем BinarySearchTree в некоторых местах мне нужно пройти по моему дереву (чтобы вставить или найти пример).И вот, наконец, мой вопрос: каков наилучший способ получить левого потомка моего объекта типа BinarySearchTree и сохранить непрерывность (BST, у которого BST левый и BST правый дочерний)
IМожно подумать о нескольких вариантах:
- виртуальный метод получения и установки и переопределение его в каждом производном классе, но есть 2 других "проблемы" с этим решением.
Должны ли у меня быть 2 других члена в моем BST, которые будут иметь тип BST * и в основном будут указывать на тот же объект, что и в моем BinaryTree?
Должен ли я просто переопределить мои геттеры, чтобы вернуть версию dynamic_cast, подобную этой: BST<T>* getLC() { return dynamic_cast<BST<T>*> (this->BinaryTree::getLC()) }
?
Помещение всех моих членов, получателей и установщиков в мой класс BST (но это идет вразрез с определением BinaryTree, базовый класс: BinaryTree без детей не является BinaryTree)
3. Просто приведение типов каждый раз, когда мне нужно, чтобы получить моего левого или правого ребенка
4.Кастинг каждый раз, когда мне нужно использовать метод в BST (производныйкласс)?
5. Есть еще предложения?