繁体   English   中英

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

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

我创建了一个Position数组,它是几个类的父级 class: PlayerItemMobMap

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

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

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

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();
...

错误:class “位置”没有成员“infoPlayer

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

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

我会用:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM