0

我正在构建一个包含 3 个类的树结构NodeLeaf并且Branch.

  1. Node是树节点的抽象类。
  2. Leaf是从中衍生出来的Node,不能生孩子。
  3. Branch派生自Nodewhich can have children and have a methodadd(Node*)

而且我有具体的课程,例如Bookwhich is aLeafBookShelfwhich is a BranchBookShelf但是,如果是 a ,我会加倍,因为当它不是一本书时,Branch该方法add(Node*)无效。Node*因此该Branch接口不适用于BookShelf. 如何处理那些事情?

4

2 回答 2

3

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

  • Branch应该是类型上的模板T(用于定义成员列表和add's 参数)
  • LibraryItem源自于Node
  • Book源自LeafLibraryItem
  • BookShelf源自Branch<LibraryItem>LibraryItem
于 2013-08-16T02:58:00.083 回答
1

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

class Book {
    // ...
};

typedef std::vector<Book> book_shelf;

完毕。

于 2013-08-16T02:57:50.237 回答