我有一个班级Object
和一些派生类,例如class Bird : public Object
。定义并实现了函数Object::Render
和Bird::Render
。 (事实上,Bird::Render
调用Object::Render
)
我还有一个vector<Object*>
,它持有一堆Bird*
个。现在,将来,此向量还将包含其他类型的对象。
我的问题是:在不知道该向量元素的类型的情况下,是否可以执行其特定的Render
函数,即可以
vector<Object*> objects;
object.push_back(new Bird());
// ...
objects[i]->Render(); // This should execute Bird::Render
据我所知,最后一行只执行Object::Render
(这对于调用函数来说是有意义的,这是一个香草Object
)。
有没有办法改变它?
答案 0 :(得分:3)
Object::Render
应为virtual function
,Bird
应覆盖Render
功能。
class Object
{
public:
virtual ~Object() {}
virtual void Render() = 0;
};
void Object::Render() {}
class Bird : public Object
{
public:
void Render() { Object::Render(); }
};
vector<Object*> objects;
objects.push_back(new Bird());
objects[0]->Render();