dynamic_cast
运算符能够将基类的指针或引用安全的转换为派生类的指针或者引用。转换失败,返回空地址。
RTTI是运行阶段类型识别(Runtime Type Identification)的简称。是指程序在运行阶段确定对象的类型。
C++中可以进行运行时识别出变量等类型信息的还有typeid
。
使用dynamic_cast转换的前提是A必须有虚函数,即虚函数表。dynamic_cast
的关键就是虚函数表,因为B类有自己的虚函数表,A类也有自己的虚函数表,根据虚函数表的不同可以判断到底是属于哪个类。我们简单仿写一下。当然,我们只是尝试一下,不能用于实际,毕竟开销大且有局限性。