如何在C++中重新使用一个基类的字段?

问题描述 投票:0回答:1

我想设计一个节点类,然后可以用于各种类型的树,但当我试图考虑如何以不创建不必要的字段的方式来做时,我遇到了复杂的问题。例如,我有以下类。

class Node {
protected:
    Node *left;
    Node *right;
}

这个类会有一些方法来处理获取和设置节点的左右连接。但是,我还会有下一个类。

class BinaryNode : public Node { 
protected:
    BinaryNode *left_child;
    BinaryNode *right_child;
    BinaryNode *parent;
}

除了新的父节点连接之外 左右子节点可以用基类的左右连接来描述 但我不能使用它们 因为它们不是二进制节点 有没有合适的方法将它们重新使用,使其表现为我想要的样子?

我还想到,这样做可能不值得,无论如何我都应该创建新的字段,这样我就不会被迫拖着有时不直观的名字和可疑的铸造。我欢迎大家对这个思路发表意见。

c++ inheritance
1个回答
5
投票

用建议的类层次结构。BinaryNode 会有四个子节点。来自基础的左、右通用节点,左、右二进制节点作为直接成员。

除非你需要动态多态,否则模板将是重用节点代码的合适方式。这是一个典型的奇特循环模板模式的用例。

template<class Child>
class Node {
protected:
    Child *left;
    Child *right;
};

class BinaryNode : protected Node<BinaryNode> { 
protected:
    BinaryNode *parent;
};
© www.soinside.com 2019 - 2024. All rights reserved.