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

Best way to pass multiple child classes in c++

本文关键字:子类 最佳 方式 c++      更新时间:2023-10-16

假设我们有一个基类base

class Base{
virtual double GetNumber();
}

以及多个子类(让我们称它们为"A"、"B"answers"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对象管理。

感谢您的评论!解决方案很简单:

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