在c ++中传递多个子类的最佳方法

时间:2017-01-13 21:24:06

标签: c++ pointers object inheritance object-slicing

让我们假设我们有一个基类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对象管理。

1 个答案:

答案 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对象中,我稍后会处理删除。