书架分支是一个分支吗?

时间:2013-08-16 02:46:02

标签: c++ inheritance

我正在构建一个包含3个类NodeLeafBranch的树结构。

  1. Node是树节点的抽象类。
  2. Leaf派生自Node,但不能生孩子。
  3. Branch派生自Node,可以有孩子并拥有方法add(Node*)
  4. 我有像Book这样的具体课程,LeafBookShelfBranch。但是,如果BookShelfBranch,我会加倍,因为当add(Node*)不是图书时方法Node*无效。因此Branch接口不适用于BookShelf。如何处理这些事情?

2 个答案:

答案 0 :(得分:3)

如果您尝试将BookShelf::add()限制为库项目,则需要使用泛型(也称为模板)。您还需要定义一个抽象类LibraryItem来翻译Node的概念。

  • Branch应该是T类型的模板(用于定义成员列表和add的参数)
  • LibraryItem派生自Node
  • Book派生自LeafLibraryItem
  • BookShelf派生自Branch<LibraryItem>LibraryItem

答案 1 :(得分:1)

通过继承很好地对集合进行建模是发明模板的主要动机之一。

class Book {
    // ...
};

typedef std::vector<Book> book_shelf;

完成。