2013-07-12 28 views
0

我使用C++創建了一個遊戲,所有對象類都來自一個基類Instance,並且它們都被列入vector。我必須能夠從向量中的指針訪問變量和函數。這裏是我的代碼,用於激活每個實例的每次更新方法:C++多態類變量和函數

for (double j = 1000; j >= -1000; j -= 1) { 
    for (int i = 0; i < instances.size(); i += 1) { 
     if (instances[i]->depth == j) { 
      instances[i]->update(); 
     } 
    } 
} 

我可以訪問的功能和執行它們,並且單個實例可以訪問自己的功能,但我無法通過instances[i]->whatevervariable訪問的情況下,它似乎從基類獲取變量的值。使用dynamic_casts不會有幫助,因爲我試圖讓遊戲非常靈活。那麼如何設置

std::vector<Instances*> instances; 

因此它允許我通過instances[i]->訪問變量和函數?

類:

class Instance { 
    public: 
    double x; 
    double y; 
    double depth; 

    virtual void update() { }; 
}; 
class Ball : public Instance { 
    public: 
    double x; 
    double y; 
    double depth; 

    void update() { 
     x += 1; 
    } 
} 
+0

球不是從實例 – Emilcasvi

+0

你並不需要在球聲明變量,如果球從實例繼承繼承。儘管如此,您應該將類​​Ball聲明爲實例的派生類,在它的類聲明中,IE類Ball:public Instance。 – Egg

+0

您可能希望更新也是純虛擬的。 'virtual void update()= 0;' – apartridge

回答

0

重新聲明球爲以下

class Ball : public Instance { 
    public: 
    void update() { 
     x += 1; 
    } 
} 

通過將「:公共實例」你在做球是一個派生類的實例,並具有相同的公共或受保護屬性,它會有深度,x和y沒有明確聲明它們。

http://www.learncpp.com/cpp-tutorial/112-basic-inheritance-in-c/

+0

如果您再次查看代碼,我的意思是補充說,但我忘了。 –

+0

它工作?或者你仍然收到錯誤 – Emilcasvi

+0

它確實有效,通過刪除重複的變量聲明。謝謝。 –