C++:不同类型对象的数组(访问子对象的方法class)
C++: Array of differents types of objects (access to the methods of the child class)
我创建了一个 Position
的数组,它是几个 class 的父级 class:Player
、Item
、Mob
, 和 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()
等,您可以为板上的每个对象调用这些方法。
我创建了一个 Position
的数组,它是几个 class 的父级 class:Player
、Item
、Mob
, 和 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()
等,您可以为板上的每个对象调用这些方法。