Наследование базового класса, определение базового класса "метод-прототип, но вызов метода дочернего класса" из третьего объекта

У меня есть класс под названием "Game", с прототипами функций "Update" и "Draw", но они не определены. Это зависит от объекта, унаследовавшего объект "Game", чтобы переопределить их. Это возможно?

Содержание "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 не может вызвать метод MyGame Update(), когда GameManager's Game = MyGame, а не Game?

1 ответ

Определять Draw а также Update как virtual методы в базовом классе Game,

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 указатель.

Другие вопросы по тегам