我想玩一个对象矢量。假设我有一个Base
类和两个派生类:Derived_A
和Derived_B
。
class Base{...};
class Derived_A: public Base{};
class Derived_B: public Base{};
在main()
中,我创建了一个包含10个Derived_A
类对象的向量,例如:
std::vector < Derived_A > array;
array.reserve(10);
现在,我想做的是从这个向量的元素中选择一个(或几个)并将其类型更改为Derived_B
。最后,我将有一个类Derived_A
的一些元素和一些类Derived_B
的元素。
这可能吗?或者你有更好的方法吗?
答案 0 :(得分:3)
不,这没有任何实际意义。 Derived_A
和Derived_B
不兼容;只有每个Base
部分。
如果你有std::vector<Base*>
和virtual
成员函数,那么你可以[间接]存储任何一种类型的对象,但不要将它们转换为另一种。
顺便提一下,向量不是数组,而std::vector::reserve
不会创建元素。它只为它们保留了存储空间。你可能意味着std::vector::resize
。
答案 1 :(得分:1)
你会想要几件事情,我想:
Base
而不是Derived
之一进行存储,即使这样,您也无法存储对象,而是指针/引用。答案 2 :(得分:1)
此
std::vector < Derived_A > array;
array.reserve(10);
没有定义10个对象的向量。它定义了一个0对象的向量。
对于您的问题,在一般情况下,Derived_A类型的对象可能无法转换为Derived_b类型的对象。在这种情况下,通常的方法是定义指向基类的指针向量。例如
std::vector<Base *> v;
并添加指向Derived_A和Derived_B对象的指针。派生类应该继承基类的虚函数。析构函数也必须声明为虚拟。