我目前有两类:item
和catalog
;后者包含的item
秒的列表,并处理它们的一些方法:继承的继承集合
class item {
int index;
vector<item*> related_items;
// other member variables and functions
}
class catalog {
size_t length;
item* items;
public:
catalog(size_t l);
~catalog(); // delete[] items;
// other member variables and functions
}
catalog::catalog(size_t l) {
items = new item[length = l];
// Set properties of new items
}
(我不认为这将使任何区别,如果items
是一个vector<item>
代替。)一些的item
的初始化,像填充列表related_items
,需要全套item
s,因此在catalog
构造函数中完成。现在
我想定义新类:book
,它代表了特定类型的item
和library
,这是保存book
个类型的catalog
。我希望library
构造函数为一定数量的book
s分配内存,然后用与catalog
完全相同的方式初始化那些从item
继承的book
成员。然后它会对book
的其余成员进行一些进一步的初始化。
我最初的想法是使这些派生类分别为item
和catalog
。但是,因为library
不能是catalog
的派生类,因为catalog
有一个指向基类对象数组的指针。实施这种结构的“最佳”方式是什么?
模板和[模板专业化](http://www.cprogramming.com/tutorial/template_specialization.html)也许? –
图书馆从目录中检索有什么问题?它也会指向一系列物品,但就你而言,所有这些物品都将成为书籍。 –
@Othman然后你会有[对象切片](http://en.wikipedia.org/wiki/Object_slicing),因为'items'是一个'item' *对象*的数组。 –