在我的比賽,我已經定義了一個Screen
類,包含了一些視覺Entity
對象的引用,可以繪製到顯示器:里氏替換原則和一流的設計爲遊戲
class Screen {
public:
private:
std::vector<Entity*> entities_;
};
所有Entity
的,具有Draw()
功能:
class Entity {
public:
void Draw();
private:
int xpos;
int ypos;
};
Screen
的負責調用在其每個Entity
S的Draw()
功能。
問題在於一些(但不是全部)Entity
也需要是可更新的,即隨着時間的推移它們將改變它們的外觀/位置。 Screen
還需要調用Update()
函數,但僅適用於可更新的對象。
我的問題是:
是否有意義從Entity
有一個更新的功能派生類:
class ChangingEntity : public Entity {
public:
void Update(int time);
};
,並有Screen
是這樣的:
class Screen {
public:
private:
std::vector<Entity*> entities_;
std::vector<ChangingEntity*> changing_entities_;
};
如果我做了上述,然後我只調用Draw()
爲每個Entity
s和Draw()
和Update()
每個ChangingEntity
s。
或者 - 我應該只把Update()
函數放在Entity
,如果Entity
對象不能更新,那麼Update()
沒有實現?
如果您知道如何將兩者靜態分開,然後分開容器。多態性適用於你*不知道你將要使用的靜態類型。 –
你是什麼意思「如果你知道如何使兩者靜止分開......」你的意思是如果我能明確區分它們,並且事先知道它們是什麼類型?如果是這樣,那麼是的,我可以做到這一點。 – patchwork
「從實體派生類是否有意義」 - 可能目前還沒有,因爲「實體」不適合用作基類。它有一個公共的非虛擬析構函數,這是個壞消息。對於基類,析構函數應該是虛擬的或者是保護的。 –