【问题标题】:Class function with parameter of same type as class具有与类相同类型参数的类函数
【发布时间】:2020-07-18 23:10:55
【问题描述】:

我正在尝试用 C++ 编写一个国际象棋引擎。我有一个类gameState,它存储棋子的位置、类型和颜色,并有几个函数来确定有关棋盘的相关信息,例如给定的国王是否在检查中。它还有makeCopyOf(gameState g)函数,将参数的数据复制到自己的。

我正在尝试在gameState 中编写一个函数来测试将死,为了做到这一点,我想将其数据复制到另一个相同类型的临时对象中。有没有办法将gameState 作为参数传递给它自己的函数之一? JavaScript 中的 this 之类的东西?

【问题讨论】:

  • C++ 有一个用于 all 类的 this 成员 - 但它是指向对象的 指针,因此您必须尊重它对象本身(使用*this)。但是,在类复制函数中使用它可能会出现一些问题。如果您想要更详细的答案,请向我们展示(部分)您的代码!
  • 显示代码更容易理解。用文字解释代码很难。这个问题很不清楚。

标签: c++ function class parameters self-reference


【解决方案1】:

听起来你想写一个Copy Constructor

这类似于构造函数或初始化程序,但将相同的类作为参数并创建一个新类。例如,您的可能看起来像这样:

class GameState {
  public:
    GameState(const GameState& g) {
      game_state_var_1 = g.game_state_var_1;
      game_state_var_2 = g.game_state_var_2;

      // ...
  }
};

然后在实践中你会这样使用它:

GameState g = GameState();
GameState duplicate_g = GameState(g);

还值得注意的是,如果您有 JavaScript 背景,那么了解 JavaScript 是一种独特的语言非常重要。既不是功能性的也不是面向对象的,而是假装两者兼而有之。在你的类中编写一个新函数之前,先花点时间看看 C++ 是否支持重写操作。

例如,您描述了您为GameState 类编写的makeCopyOf(gameState g) 函数。但更惯用的 C++ 方法是像这样覆盖 = 运算符:

class GameState {
  public:
    const GameState& operator=(const GameState& g) {
      game_state_var_1 = g.game_state_var_1;
      game_state_var_2 = g.game_state_var_2;

      // ....
      return *this;
    }
};

这意味着您可以使用赋值运算符将 GameState 对象的值设置为另一个 GameState 对象的值,如下所示:

GameState g1 = GameState(1);
GameState g2 = GameState(2);

g1 = g2;
// g1 now has the same data as g2

希望这会有所帮助,没有任何代码很难直接回答您的问题。

【讨论】:

    【解决方案2】:

    发布后我几乎立即意识到我可以使用函数重载来定义另一个不带任何参数的 makeCopyOf()。这似乎解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2010-09-07
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      相关资源
      最近更新 更多