继承类的继承集合
Inherited collection of inherited class
我目前有两个类: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
,所以是在catalog
构造函数中完成的。
现在我想定义新的类:book
,它表示item
的特定类型,library
,它是保存book
s的catalog
的类型。我希望library
构造函数为一定数量的book
s分配内存,然后以与catalog
完全相同的方式初始化从item
继承的book
的那些成员。然后,它将对book
的其余成员进行一些进一步的初始化。
我最初的想法是使这些派生类分别为item
和catalog
。但就目前情况来看,library
不可能是catalog
的派生类,因为catalog
有一个指向基类对象数组的指针。实现这种结构的"最佳"方式是什么?
如果catalog
包含一个指针数组,比如std::vector<std::unique_ptr<item>>
,那么它可以包含item
的任何子类型。继承catalog
的library
可以具有只接受book
的成员函数(从item
继承),并且它可以在返回对书籍的引用时(或者,无论您想对它们做什么)适当地投射指针。
另一种选择是模板:
template<class T>
class catalog {
std::vector<T> items;
};
class library: public catalog<book> {
// ...
};
模板的一个缺点是不同catalog
实例的子类型没有共同的父级。这是否重要取决于你的设计。
由于您的示例中没有任何成员函数,因此很难判断继承是否有意义。library
可以包含一个catalog<book>
成员,也可以在不使用单独的library
类的情况下原样使用catalog<book>
。
- 继承函数的重载解析
- 处理多个异常集合的C++方法
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 继承期间显示未知行为的子类
- 如何将ampl中的集合表示为c++中的向量
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 检查值是否在集合p1和p2中,但不在p3中
- 带过滤器的现代迭代c++集合
- 如何将结构插入到集合中并打印集合的成员
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 集合上的输出迭代器:assign和increment迭代器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 混合组合和继承的C++问题
- 如何从C 中的集合中检索多个继承类型
- 继承Java集合接口(Set、Map、List等)的C++等价物是什么?或者扩展AbstractCollection
- 继承类的继承集合
- 多重继承和异构集合
- 创建从STL集合继承的新类带来的bug