dynamic_cast的作用:将基类类型的指针或引用安全的转换为派生类型的指针或引用。
在C++primer上看到一句话
RTTI运算符特别适用于以下情况:我们想使用基类对象的指针或引用执行某个派生类操作并且该操作不是虚函数。
一开始我理解成把可以将指向基类对象的指针通过RTTI运算符dynamic_castzh转换为派生类指针,然后可以执行派生类操作
但我心中闪过一丝疑虑,觉得不应该啊,从基类指针转换到派生类指针多出来的派生类成员从何而来?
但后面看到书中代码实例,我的疑惑解开了
if(Derived *dp = dynamic_cast<Derived*>(bp))
{
//使用dp指向的derived对象
}
else
{
//使用bp指向的derived对象
}
当基类指针bp指向的是Derived对象,则上述的类型转换初始化dp并令其指向bp所指的Derived对象。如果bp指向的是基类对象
那么转换就会shi失败,返回0(也就是空指针)
也就是说,只有当基类指针本身指向的是派生类对象,才能够进行对派生类指针的转换,所以说,不存在多出来的的派生类的成员。
对于使用dynamic_cast对基类指针和派生类指针之间的转换我也总结出了一些东西: