递归类中的吸气剂,带有指向该类其他实例的指针

时间:2018-12-09 12:50:02

标签: c++ templates pointers recursion tree

对于一个学校项目,我需要为索引和T类型的值的元组构建BinarySearchTree,我决定使用左右两个子指针(指向其他实例,但请耐心等待)。

为了使该类更具现实性和可读性,我构建了3个不同的类:具有继承的Tree,BinaryTree和BinarySearchTree。

我在BinaryTree类中声明了左侧和右侧子级的getter和setter,该类如下所示:

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)的最佳方法是什么?

我想到了多种选择:

    虚拟getter和setter并在每个派生类中重新定义它,但该解决方案还有两个其他“问题”。
  1. 我的BST中是否应该有2个其他成员,这些成员的类型为BST *,并且基本上指向与BinaryTree中的对象相同的对象?

    1. 我应该重新定义我的吸气剂以返回诸如以下的dynamic_cast版本:BST<T>* getLC() { return dynamic_cast<BST<T>*> (this->BinaryTree::getLC()) }吗?

    2. 将我的所有成员,getter和setter放入我的BST类中(但这与BinaryTree的定义相反:基类:没有子项的BinaryTree不是BinaryTree)

3。每次我需要生左或右孩子时,都要抛石膏
4.每次我需要在BST(派生类)中使用方法时进行铸造吗?
5.还有其他建议吗?

0 个答案:

没有答案