我有一个引擎类,我想设置一个命令。 这是标题:
class GameEngine
{
public:
GameEngine();
~GameEngine();
MoveCommand command;
void SetCommand(ICommand &);
void Start();
};
问题是 ICommand
。主要是我设置了命令
engine.SetCommand(cmdRight);
其中 cmdRight
是一个 MoveCommand
。我不明白 setCommand
函数中传递的是什么。
最佳答案
SetCommand
引用 ICommand
目的。 (现在,您可以将引用视为具有不同语法的指针,以便使用它们)。假设 ICommand
是 MoveCommand
的父类,您可以传递 MoveCommand
的引用(例如 cmdRight
)到 GameEngine::SetCommand()
.在 SetCommand()
您必须将传递的引用类型转换为 MoveCommand
为了能够将值分配给 command
-- 否则实际对象的类型可能是 ICommand
的另一个子类型.
试试这个:
void GameEngine::SetCommand(ICommand& cmd) {
try {
MoveCommand& mcmd = dynamic_cast<MoveCommand&>(cmd);
command = mcmd;
} catch (const std::bad_cast& e) {
std::cout << "Wrong command passed: move command expected" <<
" (" << e.what() << ")" << std::endl;
}
}
注意:如果您不是特别需要 MoveCommand
在GameEngine
, 你可以声明 command
类型 ICommand*
并通过 ICommand 接口(interface)使用传入的值。不过,您必须动态分配和取消分配对象,所以如果您不熟悉该主题,请尝试上面的代码。
关于c++ - 设置引用c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982007/