2013-10-31 265 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