C++类型转换操作符 dynamic_cast

dynamic_cast 顾名思义是支持动态的类型转换,即支持运行时识别指针或引用所指向的对象。

dynamic_cast<>用于C++类继承多态间的转换,分为:

  1. 子类向基类的向上转型(Up Cast)
  2. 基类向子类的向下转型(Down Cast)

其中向上转型不需要借助任何特殊的方法,只需用将子类的指针或引用赋给基类的指针或引用即可,dynamic_cast向上转型其总是肯定成功的。

而向下转换时要特别注意:dynamic_cast操作符,将基类类型的指针或引用安全的转换为派生类的指针或引用。dynamic_cast将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。这也是dynamic_cast与其他转换不同的地方,dynamic_cast涉及运行时类别检查,如果绑定到引用或指针的对象不是目标类型的对象,则dynamic_cast失败。如果是指针类型失败,则dynamic_cast的返回结果为0,如果是引用类型的失败,则抛出一个bad_cast错误。

注意:dynamic_cast在将父类cast到子类时,父类必须要有虚函数。因为dynamic_cast运行时需要检查RTTI信息。只有带虚函数的类运行时才会检查RTTI。

猜你喜欢

转载自blog.csdn.net/qq_34342154/article/details/79431619