微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从类继承但使用属性的子类

如何解决从类继承但使用属性的子类

我必须在 C++ 中实现一个红/黑树 (RBTree),继承自我已经创建的二叉搜索树 (BSTree) 类。

BSTree 类包含一个指向树根的节点指针(节点是我为 BSTree 创建的类)。

我想创建一个名为“RBTNode”的Node子类,其中包含颜色属性和相关方法(所以RBTNode是Node的子类),然后我想创建继承自BSTree的RBTree类,但是使用新的 RBTNode 而不是标准的 Node。

结构如下:

  • BSTree 包含节点;
  • RBTNode Node 的子类;
  • RBTree BSTree 的子类;
  • RBTree 包含 RBTNode;

我怎么能做到这一点?

解决方法

正如 Jarod42 在评论中所建议的,您可以通过使节点类型成为 BSTree 类的模板参数来实现这一点。

假设您有这两个节点类:

template<typename KeyT>
class BSNode {
public:
    KeyT key;
    // ...
};

template<typename KeyT>
class RBNode : public BSNode<KeyT> {
public:
    bool color;
};

然后您可以将节点类型模板参数添加到 BSTree 并使其默认为 BSNode。然后您可以在继承 RBNode 时使用 RBTree

template <typename KeyT,typename NodeT = BSNode<KeyT>>
class BSTree {
protected:
    NodeT *root;
};

template <typename KeyT>
class RBTree : public BSTree<KeyT,RBNode<KeyT>> {
    // root will be of type RBNode<KeyT>* here
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。