在不丢失数据的情况下在同一容器中存储子类对象?

时间:2015-06-06 14:20:02

标签: c++ object containers parent-child base

所以我想说我有一个名为Fruits的基类,

class Fruit{

  public TYPE{ Apples, Oranges, Grapes, NoType };
  virtual int getType(){ return Fruit::TYPE::NoType; };
  virtual ~Fruits(){};

  virtual int randomFunc(){ return 991; };

}

然后让我说我有一个名为Apple的儿童班,

class Apple : public Fruit{

  virtual int getType()override{ return Fruit::TYPE::Apples; };

  virtual int childFunc(){ return -1; };

}

现在,我的问题是,是否可以接收具有基类Fruits的对象,并将各种子对象存储在同一个地图/容器中,而不会丢失' childFunc()'功能,或基地中不存在的任何变量/功能?理想情况下,我试图找到类似的东西,

int FruitStorage::addFruit( Fruit* f, int i ){

     this->fruitsMap[i] = *f; //I feel like receiving a base object will strip the child functionality. 
     return this->fruitsMap[i]->childFunc(); //I need to use the child functions after the object is stored.

}

是否可以使用这样的模板?这是一种通常不赞成的做法吗?我对单独容器的问题是我需要以先进先出的方式进行跟踪。

1 个答案:

答案 0 :(得分:2)

std::shared_ptr<Fruit>存储在您的容器中。要查看您是否可以依赖childFunct(),您需要执行dynamic_cast<Apple *>(fruit.get()),其中水果为std::shared_ptr<Fruit>