【发布时间】:2021-10-07 08:22:11
【问题描述】:
我想创建从同一个基类继承但有自己的函数的对象向量,这些函数不在基类中(创建虚函数是不可能的,因为继承的类将不同的变量作为参数一个函数)。
基类:模型
从Model类继承的第一个类:Bus
void Bus::draw_model_bus(angle_x, angle_y, P_scene, V_scene, M_scene) const;
继承自Model类的第二个类:Grass
void Grass::draw_model_grass(P_scene, V_scene, M_scene) const;
... 我希望能够在存储在这一模型向量中的 Bus 和 Grass 对象上调用上述函数。 std::vector<Model*> models; 下面的代码不起作用:
models[0]->draw_model_bus(angle_x, angle_y, P_scene, V_scene, M_scene);
models[1]->draw_model_grass(P_scene, V_scene, M_scene);
我想像这样初始化这些对象:
// Bus
models.emplace_back(Bus("res/models/Bus.obj", "res/textures/Bus_tex.tga.png"));
models[0]->read_model();
// Grass
models.emplace_back(Grass("res/models/grass.obj", "res/textures/grass.png"));
models[1]->read_model();
如何像我上面描述的那样存储这些对象?
【问题讨论】:
-
要存储指针,您需要使用
new但是,我建议使用shared_ptr的向量 -
^^^ 即使在那之后,您对集合的可疑选择以及调用特定于派生的非虚拟成员的愿望将需要一些有针对性的
dynamic_pointer_cast用法。 -
@ChrisMM 则无法调用 draw_model_bus 和 draw_model_grass 函数。
-
除非基类将它们定义为虚拟方法,否则不会。您是否熟悉虚拟方法及其工作原理?
-
那是抽象函数,而不仅仅是一个虚函数。在基类中实现它们,以引发异常,指示它们被错误类型的对象调用。
标签: c++ function inheritance vector virtual