gpt4 book ai didi

c++ - 多态性误解/重新定义的虚函数不起作用

转载 作者:行者123 更新时间:2023-11-28 03:37:48 24 4
gpt4 key购买 nike

我想我应该从简化我的类结构开始,这样我才能更好地解释我的问题,我怀疑这可能只是对 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 对象传递给它,然后将 snakes _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();

}

}

最佳答案

我真的没有发现您正在做的事情有什么问题(至少就理解和使用虚拟方法而言)。

这是一个完整的例子。请将其与您的代码进行比较。

#include <stdio.h>

class Controller{
public:
virtual void InitialiseController(){
printf ("base class controller...\n");
}
};

class AIController : public Controller{
public:
virtual void InitialiseController(){
printf ("AIController subclass controller...\n");
}
};

class ComController : public AIController{
public:
virtual void InitialiseController(){
printf ("ComController subclass controller...\n");
}
};

int main (int argc, char *argv[])
{
Controller *myController = new ComController ();
myController->InitialiseController ();
return 0;
}

编译:g++ -Wall -pedantic -o tmp tmp.cpp

执行:ComController 子类 Controller ...

关于c++ - 多态性误解/重新定义的虚函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com