-1

「Game」というクラスがあり、プロトタイプ関数「Update」と「Draw」がありますが、定義されていません。それらをオーバーライドするのは、「ゲーム」オブジェクトを継承するオブジェクト次第です。これは可能ですか?

「Game.h」の内容

class Game // does it have to abstract/virtual?
{
    public:
    //General stuff for all games here
}

void Update(Game *game) = 0; // or make it virtual in someway

「MyGame.h」の内容

#include "Game.h"

class MyGame : public Game
{
    public:
    // General stuff for my game
}

void Update(MyGame *game);

// 「MyGame.cpp」の内容

#include "MyGame.h"

void Update(MyGame *game) // does it have to be overriden/overloaded?
{
}

// 「GameManager.h」の内容

#include "Game.h"

class GameManager
{
    public:
    Game *game;
}

void Update(GameManager *manager);

// 「GameManager.cpp」の内容

#include "Game.h"

void Update(GameManager *manager)
{
    Update(manager->game);
}

キーは最後のメソッドです: GameManager の Game object = MyGame で Game ではない場合、GameManager は MyGame Update() メソッドを呼び出せないのはなぜですか?

4

1 に答える 1

2

と を基本クラスのメソッドとして定義Drawします。UpdatevirtualGame

class Game
{
public:
   virtual void Draw() {};
};

class MyGame : public Game
{
public:
   virtual void Draw() {}
};

void callDraw(Game* game) 
{
   game->Draw();
}

//...

Game* game = new MyGame;
callDraw(game);

最後の呼び出しは、ポインターMyGameで呼び出されますが、メソッドを呼び出します。Game

于 2012-08-20T14:39:13.157 に答える