C++:不同类型对象的数组(访问子对象的方法class)

C++: Array of differents types of objects (access to the methods of the child class)

我创建了一个 Position 的数组,它是几个 class 的父级 class:PlayerItemMob, 和 Map.

我想在我的 Position 数组(动态创建的对象)中创建一个包含多种类型对象的数组,然后想使用我的对象的独特方法。

我不能使用虚拟类型,因为我必须编写所有 classes 的方法,这样会不连贯。

所以我请你尝试解决这个问题。

Map.h :

...
static constexpr int mapColonne{14};
static constexpr int mapLigne{6};
Position *positionObject[mapLigne][mapColonne];
...

Map.cpp :

...
positionObject[i][j] = new Player("Player1");
positionObject[i][j]->infoPlayer();
...

Error: class "Position" has no member "infoPlayer

您有以下选项,具体取决于如果元素不包含您认为它包含的类型,您希望发生什么:

  • static_cast<Player *>(positionObject[i][j])->infoPlayer(); - 类型不匹配的未定义行为。
  • dynamic_cast<Player *>(positionObject[i][j])->infoPlayer(); - 在类型不匹配时强制转换 returns null,您可以检查这一点。如果不检查 null,在空指针上调用方法可能会崩溃。
  • dynamic_cast<Player &>(*positionObject[i][j]).infoPlayer(); - 类型不匹配异常。

我会使用:

  • (3) 如果我认为我知道正确的类型。
  • (1) 如果我绝对确定我知道类型。
  • (2) 如果我想先检查类型,如果不匹配再做其他事情。

dynamic_cast 通常是糟糕设计的标志。我认为没有理由在这里使用它。您所有的 classes 都应该有通用方法(在基 class 中声明),例如 draw()update() 等,您可以为板上的每个对象调用这些方法。