【发布时间】:2021-08-01 12:47:27
【问题描述】:
所以我正在尝试实现二叉搜索树和 avl 树。这些类中的每一个都使用不同但相似类型的节点。节点的类如下所示:
class node
{
protected:
int key;
node* parent, * left, * right;
public:
node(int key, node* parent = nullptr) :key(key), parent(parent), left(nullptr), right(nullptr) {}
~node() {}
};
class avl_node : public node
{
private:
int height;
public:
avl_node(int key, int height, avl_node* parent = nullptr) :node(key, parent), height(height) {}
~avl_node() {}
};
这主要是有效的。任何node 可以与任何其他node 建立联系,任何avl_node 可以与任何其他avl_node 建立联系。我想到的问题是,由于多态性,node 在技术上可能有一个或多个父级或子级avl_node,我不希望这种情况发生。虽然我可以通过小心来避免这种情况,但我根本不希望它成为可能。有没有办法?
p.s.我想保持类相关
【问题讨论】:
-
如果你不想要多态,那为什么还要使用子类呢?您能否详细说明您的代码有什么问题?你想达到什么目标?
-
如果你想要容器的类型安全实现,你应该研究模板,而不是多态——这正是它们被发明的原因。否则,您将与该语言的核心功能作斗争。
-
你不能既保持类的相关性又避免多态性。为什么要让它们保持关联?
-
@molbdnilo 避免重复代码
-
@stack_overflow_nickname 你不需要相关的类。
标签: c++ class inheritance polymorphism nodes