书架分支是分支

Is a book shelf branch a branch?

本文关键字:分支      更新时间:2023-10-16

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

  1. Node是树节点的抽象类。
  2. Leaf来源于不能生孩子的Node
  3. Branch派生自Node,它可以有孩子并有一个方法add(Node*)

我有像Book这样的具体类,这是一个LeafBookShelf是一个Branch。但是,如果BookShelfBranch,我会加倍,因为当Node*不是一本书时,add(Node*)方法无效。因此,Branch接口不适用于BookShelf。如何处理这些事情?

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

  • Branch应该是类型 T 上的模板(用于定义成员列表和 add 的参数(
  • LibraryItem源于Node
  • Book源于LeafLibraryItem
  • BookShelf源于Branch<LibraryItem>LibraryItem
不可能

用继承很好地建模集合是发明模板的主要动机之一。

class Book {
    // ...
};
typedef std::vector<Book> book_shelf;

做。