0 c++ collections polymorphism object heterogeneous
所以,如果我有一个异构的Car对象集合
汽车*c = {卡车,面包车,敞篷车}
如果对象集合是随机的并且我想通过for循环遍历集合,我该如何测试特定的对象类型?
你会用一个dynamic_cast:
if (truck* truck_p = dynamic_cast<truck*>(car_p)) {
// car_p points at a truck
}
Run Code Online (Sandbox Code Playgroud)
dynamic_cast将检查被指向的对象的动态类型,car_p并且仅在允许的情况下允许强制转换truck.如果它不是a truck,它将给出空指针值,因此if条件将失败.
但是,需要测试这样的动态类型表明代码设计不好.多态性的全部意义在于,您可以将任何派生对象视为基础对象 - 不应该确切地测试它是哪个派生类型.如果你需要检查a的动态类型,Car以便你可以truck对它进行某些特定的操作,那么你不应该把它truck放到一个容器中Car*.