繁体   English   中英

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

[英]Storing Child Class Objects in the Same Container without loosing data?

所以可以说我有一个叫做水果的基类,

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.

}

可以将模板用于类似这样的东西吗? 这是普遍不赞成的做法吗? 我使用单独容器的问题是,我需要以先进先出的方式进行跟踪。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM