C++ 如何区分异构集合中的特定对象类型?

标签 c++ object collections polymorphism heterogeneous

所以如果我有一个异构的 Car 对象集合

Car* c = {truck, van, convertible}

如果对象集合是随机的并且我想用 for 循环遍历集合,我该如何测试特定对象类型?

最佳答案

你会使用一个dynamic_cast:

if (truck* truck_p = dynamic_cast<truck*>(car_p)) {
  // car_p points at a truck
}

dynamic_cast 将检查 car_p 指向的对象的动态类型,并且仅当它是 truck 时才允许转换。如果它不是 truck,它将给出空指针值,因此 if 条件将失败。

但是,需要像这样测试动态类型表明代码设计不当。多态性的全部意义在于,您可以将任何派生对象视为基础对象——无需确切地测试它是哪种派生类型。如果您需要检查 Car 的动态类型,以便您可以对其执行一些 truck 特定的操作,那么您不应该扔那个 truck 放入 Car* 的容器中。

关于C++ 如何区分异构集合中的特定对象类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15011686/

相关文章:

C++ 没有已知参数 1 从 ‘Node*’ 到 ‘Node*&’ 的转换

c++ - 将中缀表示法表达式转换为后缀表示法

Java创建具有多个对象的类列表

javascript - 无法访问数组中对象的属性

java - 对集合中的所有偶数进行升序排序,然后对所有奇数进行降序排序

java - 为什么在创建迭代器对象后无法向 java 中的 ArrayList 添加值

c++ - 在 C++ 中查找函数 <algorithm>

c++ - 我可以通过对象访问类中函数中的变量吗?

javascript - 重组对象数组然后对对象进行分组

scala - 验证数字序列是否在允许的范围内