在c++中传递多个子类的最佳方式
Best way to pass multiple child classes in c++
假设我们有一个基类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对象中,我稍后处理删除。
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- 仅让特定类'Fabric'构造类'Foo'及其所有子类的实例
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 如何在C++子类中访问父类的私有变量
- 以错误的方式调用子类中的函数的最佳方法是什么