让我们假设我们有一个基类Base
class Base{
virtual double GetNumber();
}
和多个子类(让我们称之为'A','B'和'C')看起来像
class A : public Base{
double GetNumber(){return 1;};
}
现在我有另一个应该通过函数接收子类的类。它看起来像这样:
class Caller(){
Base* b;
void SetB(Base* b){this->b = b;};
}
我只传递指针以防止对象切片。但是从我想要调用函数的地方看起来像这样:
std::vector<Caller> cVec; //multiple Caller object in here
for (std::vector<Caller>::iterator it = cVec.begin(); it != cVec.end(); ++it){
A child;
//Some manipulation of child
cVec.SetB(&child);
}
指针解决了对象切片的问题,但是我不希望所有的Caller对象都指向同一个子对象。我可以通过创建另一个包含多个子类实例的向量来解决它,但我想知道是否有更好的方法可以做到这一点?
编辑1: 只应在for循环中创建子对象并由Caller对象管理。
答案 0 :(得分:0)
感谢您的评论! 解决方案就像刚刚做的一样简单:
std::vector<Caller> cVec; //multiple Caller object in here
for (std::vector<Caller>::iterator it = cVec.begin(); it != cVec.end(); ++it){
cVec.SetB(new A(p1, p2...));
}
在Caller对象中,我稍后会处理删除。