如何制作一个既可以包含基类又可以包含派生类的列表
How to make a list that can hold both base classes and derived classes?
好的,假设我有一类刀片(基类)和一个子类刀片,称为刀和剑
class blades{
...
}
class knifes:public blades{
...
}
class swords:public blades{
...
}
现在我想从#include列出一个列表可以存储关于刀和剑的信息
int main(){
knifes k1;
swords swd1;
list<blades> list;
k1.input();
list.push_front(k1);
swd1.input();
list.push_front(swd1);
};
现在我可以把这些插入到列表中;然而,我不知道如何从列表中访问它们。如果它能帮助子类具有output()函数
您需要的是基类的唯一指针列表:
list<unique_ptr<base>> your_list;
然后,您可以用base
类和derived
类的实例来填充这两个类。
要完成Roman的答案,您可能需要这样做:https://limbioliong.wordpress.com/2013/01/03/storing-c-objects-in-a-stl-vector-part-3/。它是关于向量的,但它和列表完全一样。
编辑:使用这个,这里是网站上给出的完整示例(注意dynamic_cast以获得派生对象):
typedef unique_ptr<Base> BasePtr;
std::list<BasePtr> listBasePtr;
listBasePtr.push_front(BasePtr(new Base(0)));
listBasePtr.push_front(BasePtr(new Derived(1, 2)));
std::list<BasePtr>::iterator theIterator;
for (theIterator = listBasePtr.begin(); theIterator != listBasePtr.end(); theIterator++)
{
BasePtr& base_ptr = (BasePtr&)(*theIterator);
base_ptr -> func();
Derived* pDerived = dynamic_cast<Derived*>(base_ptr.get());
if (pDerived)
{
pDerived -> func();
}
}
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- 链表包含 c++ 中不同的派生类对象
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 派生自嵌套在类模板中的类模板,所有这些都包含在类模板中
- 如何从包含基类指针的容器中调用派生类函数(基于其类型)?
- 在C++中,为什么仅包含与其基类实例的联合的派生类占用的内存多于联合的大小?
- 如果我在不同的类中包含基类,是否也会包含该基类的派生类
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 在派生类的成员联合中包含继承的基类成员
- 无法返回包含派生指针的向量
- 包含派生类型的指针的基类
- 如何制作一个既可以包含基类又可以包含派生类的列表
- C++:向量可以<Base>包含派生类型的对象吗?
- 如何在向量中包含派生类型
- DFM:派生形式包含派生位图
- 包含派生对象的QPointer和基类不匹配
- 从DLL加载派生类时不包含派生属性
- 如果我只知道C++中的基类,如何包含派生类
- c++基类包含派生类的实例
- 指向基类的指针数组,其中包含派生类的对象和重载<<运算符