覆盖继承的函数

时间:2013-10-31 07:38:58

标签: c++ oop

我有一个班级Object和一些派生类,例如class Bird : public Object。定义并实现了函数Object::RenderBird::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)。

有没有办法改变它?

1 个答案:

答案 0 :(得分:3)

Object::Render应为virtual functionBird应覆盖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();