2013-10-31 213 views
1

我有一个类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)。

有什么方法可以改变它吗?

回答

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(); 
+3

他提到Bird :: Render调用Object :: Render,所以它可能不是纯虚拟的,或者你可能会展示如何定义纯虚函数。 – Potatoswatter

+0

@Patatoswatter好了,更正了。 – ForEveR

+0

工作就像一个魅力。非常感谢! – rspencer