Наследование базового класса, определение базового класса "метод-прототип, но вызов метода дочернего класса" из третьего объекта
У меня есть класс под названием "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
указатель.