类型转换对象矢量的一些元素

时间:2014-01-09 16:42:32

标签: c++ vector type-conversion

我想玩一个对象矢量。假设我有一个Base类和两个派生类:Derived_ADerived_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的元素。

这可能吗?或者你有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

不,这没有任何实际意义。 Derived_ADerived_B不兼容;只有每个Base部分。

如果你有std::vector<Base*>virtual成员函数,那么你可以[间接]存储任何一种类型的对象,但不要将它们转换为另一种。

顺便提一下,向量不是数组,而std::vector::reserve 不会创建元素。它只为它们保留了存储空间。你可能意味着std::vector::resize

答案 1 :(得分:1)

你会想要几件事情,我想:

  1. 实际上,将Derived_A转换为Derived_B,以及将“非常不寻常”的“兄弟”类转换是必要的。
  2. 您必须使用Base而不是Derived之一进行存储,即使这样,您也无法存储对象,而是指针/引用。
  3. 转换(可能)不会就地发生,因此您可能需要删除/重新插入。

答案 2 :(得分:1)

std::vector < Derived_A > array;

array.reserve(10);

没有定义10个对象的向量。它定义了一个0对象的向量。

对于您的问题,在一般情况下,Derived_A类型的对象可能无法转换为Derived_b类型的对象。在这种情况下,通常的方法是定义指向基类的指针向量。例如

std::vector<Base *> v;

并添加指向Derived_A和Derived_B对象的指针。派生类应该继承基类的虚函数。析构函数也必须声明为虚拟。