c++ - 设置引用c++

标签 c++ reference setter

我有一个引擎类,我想设置一个命令。 这是标题:

class GameEngine
{
public:
GameEngine();
~GameEngine();
MoveCommand command;
void SetCommand(ICommand &);
void Start();
};

问题是 ICommand。主要是我设置了命令

engine.SetCommand(cmdRight);

其中 cmdRight 是一个 MoveCommand。我不明白 setCommand 函数中传递的是什么。

最佳答案

SetCommand引用 ICommand目的。 (现在,您可以将引用视为具有不同语法的指针,以便使用它们)。假设 ICommandMoveCommand 的父类,您可以传递 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;
  }
}

注意:如果您不是特别需要 MoveCommandGameEngine , 你可以声明 command类型 ICommand*并通过 ICommand 接口(interface)使用传入的值。不过,您必须动态分配和取消分配对象,所以如果您不熟悉该主题,请尝试上面的代码。

关于c++ - 设置引用c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9982007/

相关文章:

c++ - 从 C++ 函数访问 Obj-C 属性 (iOS)

php - 在 PHP 中序列化引用

c# - 无法添加对 microsoft.office.interop.excel 的引用

c# - 如何通过 GetComponent 从另一个游戏对象中的另一个脚本访问变量?

objective-c - 关于objective-c中setter的一个问题

c++ - 当我编写这个程序时,这些标志会被调用吗?

c++ - 构造函数的显式模板特化 (g++)

c++ - DirectX - 创建以顶点数组作为参数的缓冲区

java - 另一个类中的 Get 和 Set 方法

database - 如何使用具有起始值的自动生成功能生成 hibernate ID