所以如果我有一个异构的 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/