C++ 继承基类,定义基类';原型方法,但调用子类';来自第三个对象的方法
我有一个名为“Game”的类,它的原型函数有“Update”和“Draw”,但它们没有定义。由继承“游戏”对象的对象来覆盖它们。这可能吗 “Game.h”的内容 “MyGame.h”的内容 //“MyGame.cpp”的内容 //“GameManager.h”的内容 //“GameManager.cpp”的内容 关键是最后一种方法:C++ 继承基类,定义基类';原型方法,但调用子类';来自第三个对象的方法,c++,inheritance,polymorphism,prototype,base-class,C++,Inheritance,Polymorphism,Prototype,Base Class,我有一个名为“Game”的类,它的原型函数有“Update”和“Draw”,但它们没有定义。由继承“游戏”对象的对象来覆盖它们。这可能吗 “Game.h”的内容 “MyGame.h”的内容 //“MyGame.cpp”的内容 //“GameManager.h”的内容 //“GameManager.cpp”的内容 关键是最后一种方法: 当GameManager的游戏对象=MyGame而不是Game时,为什么GameManager不能调用MyGame Update()方法?在基类游戏中定义Draw和
当GameManager的游戏对象=MyGame而不是Game时,为什么GameManager不能调用MyGame Update()方法?在基类
游戏中定义Draw
和Update
为virtual
方法
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
指针上调用的。但是我没有向类添加方法,抱歉,它们是结构化的。为了最大限度地减少每个对象之间的传输量,我定义了类/结构之外的方法。@Deukalionstructs
和classes
基本上是一样的,方法不会“在对象之间传输”。好吧,不管你说什么,我猜一定有一些关联,为什么很少对象(在图形中)没有方法,而是调用SetTextColor()、CreateFont()等方法,而不仅仅是Font->SetWidth()等等。取而代之的是创建对象的外部方法,而不是让对象拥有方法。但这只是我对它的看法,也是我学到的。@Deukalion如果你不打算使用多态性(oop的一个基本组成部分),那么使用类或从游戏中派生有什么意义呢?因为所有游戏都有特定的功能,比如屏幕等等,但是如何定义游戏取决于开发者。所以我想要一个可以重新定义的结构,如果我使用GameManager知道每个游戏有两个默认方法(更新、绘制),那么游戏必须至少定义这些方法,这样我才能重新创建它。多态性变成了Update(游戏)、Update(MyGame)、Update(YourGame)等等,但是管理者应该能够在调用方法时看到这一点,通过确定它是什么对象是可能的。
#include "Game.h"
class MyGame : public Game
{
public:
// General stuff for my game
}
void Update(MyGame *game);
#include "MyGame.h"
void Update(MyGame *game) // does it have to be overriden/overloaded?
{
}
#include "Game.h"
class GameManager
{
public:
Game *game;
}
void Update(GameManager *manager);
#include "Game.h"
void Update(GameManager *manager)
{
Update(manager->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);