我认为我应该从简化我的类结构开始,以便更好地解释我的问题,我怀疑这可能只是对使用 virtual 的误解。
我有:
class Controller{
..
virtual void InitialiseController(){ //std::cout confirms this is running }
..
}
class AIController : public Controller{
..
virtual void InitialiseController(){ //some logic here }
..
}
class ComController : public AIController{
..
virtual void InitialiseController(){ //actually the same logic as parent }
..
}
我的对象 Snake 有一个指向 Controller 的指针(Controller* _controller)
。当我调用该snake.initialise(..)
方法时,我向它传递了一个新的 ComController 对象,该对象然后将蛇 _controller 设置为等于新的 ComController。我知道这个过程很成功。
但是当我随后调用_controller.InitialiseController();
我的调试器时,会显示程序步骤进入基类 Controller 的 InitialiseContoller 的空白实现。
我知道我可能过于简单化了,您可能无法提供帮助,但我认为这可能是我对整个概念的不理解,一个逻辑错误,而不是一个输入错误,并想检查一下。
附加代码:
_player2->Initialise(_gameProperties, &_fruitManager, new ComController(_player2), _player1);
踏入..
void Snake::Initialise(
GamePropertiesManager* gpm, FruitManager* fm, Controller* control, Snake* opposingSnake)
{
_game = gpm;
_fruitManager = fm;
_controller = control;
_opposition = opposingSnake;
if(_controller){
///Bunch of stuff in here runs just fine
// This primarily serves to ensure that a ComControllers timer is started, but other controllers might wish to override initialise later
_controller->IntialiseController();
}
}