如何解决从类继承但使用属性的子类
我必须在 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 举报,一经查实,本站将立刻删除。