下面我怎樣才能使程序使用MainMenuScreen
的draw
方法代替GameScreen
?繼承/多態 - 子類調用方法
class GameScreen {
public:
virtual void GameScreen::draw() {
cout << "Drawing the wrong one..." << endl;
}
};
class MainMenuScreen : public GameScreen {
public:
void MainMenuScreen::draw() {
cout << "Drawing the right one..." << endl;
}
};
class ScreenManager {
public:
list<GameScreen> screens;
// assume a MainMenuScreen gets added to the list
void ScreenManager::draw()
{
for (list<GameScreen>::iterator screen = screens.begin();
screen != screens.end(); screen++)
{
screen->draw(); /* here it uses the draw method from GameScreen,
but I want it to use the draw method from
MainMenuScreen */
}
}
};
PS:我不想讓GameScreen::draw
完全是虛擬的,所以請給出其他建議。
如何更改我的for循環來實現這一目標? (假設目前所有的列表都是一個MainMenuScreen) – Ben 2012-03-29 22:26:22
@你不能僅僅通過修改for循環,你需要改變'screens'的定義。 – 2012-03-29 22:29:05
謝謝,我不知道。所以如果我改變你的建議,我將如何改變我的for循環?如果我還只是添加指針就足夠了嗎? – Ben 2012-03-29 22:33:10