C++ 继承类的继承集合
我目前有两个类:C++ 继承类的继承集合,c++,inheritance,C++,Inheritance,我目前有两个类:项目和目录;后者包含项的列表以及一些处理方法: 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();
项目
和目录
;后者包含项的列表以及一些处理方法:
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
}
类项目{
整数指数;
向量相关的_项;
//其他成员变量和函数
}
类目录{
尺寸与长度;
项目*项目;
公众:
目录(大小);
~catalog();//删除[]项;
//其他成员变量和函数
}
目录::目录(大小){
项目=新项目[长度=l];
//设置新项目的属性
}
(我认为如果项
是一个向量
,则没有任何区别。)项
的一些初始化,如填充列表相关项
,需要完整的项
集合,在目录
构造函数中也是如此
现在我想定义新的类:book
,它表示一种特定类型的项
,以及库
,它是一种保存图书的目录
。我希望库
构造函数为一定数量的书籍
s分配内存,然后以与目录
完全相同的方式初始化从项
继承的书籍
的那些成员。然后,它将对book
的其余成员进行进一步初始化
我最初的想法是创建这些派生类,分别是item
和catalog
。但目前,library
不能是catalog
的派生类,因为catalog
有一个指向基类对象数组的指针。实现这种结构的“最佳”方法是什么?如果目录
包含一个指针数组,比如std::vector
,那么它可以容纳项
的任何子类型。library
inheritingcatalog
的成员函数只能接受book
s(从item
继承),并且它可以在返回对书籍的引用(或者,您想对它们执行的任何操作)时适当地强制转换指针
另一种选择是模板:
template<class T>
class catalog {
std::vector<T> items;
};
class library: public catalog<book> {
// ...
};
模板
类目录{
向量项;
};
类库:公共目录{
// ...
};
模板的一个缺点是不同目录
实例的子类型没有公共父类。这是否重要取决于您的设计
因为您的示例中没有任何成员函数,所以很难判断继承是否有意义<代码>库
可以包含一个目录
成员,或者您可以使用目录
,因为它没有单独的库
类。模板,或者?从目录中插入库有什么问题??它也会指向一个项目数组,但在您的例子中,所有这些项目都将是书籍。@Othman那么您就有了,因为items
是一个item
对象数组。语法上有效的示例不会hurt@JoachimPileborg:不,不是。它是指向以项
为基础的零个或多个对象的指针。或者如果您添加了一些虚拟的:)谢谢您的建议。我想避免将动态
项目*
放入书籍*
,但我承认这主要是出于美学原因。我想我最终会沿着模板路径走得更远,同时使用template class item
和template class catalog
。当(如果)我整理好细节时,我会发布一个答案。静态播放
就足够了,只要库
确保向量中只存在书
s。