1

我有一个类Object和一些派生类,例如class Bird : public Object. 功能Object::RenderBird::Render被定义和实现。(事实上​​,Bird::Render调用Object::Render

我也有一个vector<Object*>里面拿着一堆Bird*s。现在,在未来,这个向量还将包含其他类型的对象。

我的问题是:在不知道该向量元素的类型的情况下,是否可以执行其特定Render功能,即可以

vector<Object*> objects;
object.push_back(new Bird());
// ...
objects[i]->Render(); // This should execute Bird::Render

据我所知,最后一行只执行Object::Render(这是有道理的,对于调用函数,这是一个 vanilla Object)。

有什么办法可以改变吗?

4

1 回答 1

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();
于 2013-10-31T07:42:12.637 回答