Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 继承类的继承集合_C++_Inheritance - Fatal编程技术网

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
inheriting
catalog
的成员函数只能接受
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。