具有引用的动态强制类型转换
dynamic_cast 运算符可用于强制转换为引用类型。 C++ 引用强制转型类似于指针强制转型: 它们可用于将 从 对基类对象的引用 强制转型为对派生类对象的 引用。
在动态强制转换为引用类型时, type_name 表示类型, 表达式 表示引用。 运算符将表达式转换为期望的类型 type_name&。
您无法通过将结果 (动态强制类型转换所产生的引用) 与零进行比较来验证使用引用类型的动态强制类型转换是否成功,因为没有零引用。 失败的动态强制类型转换为引用类型会抛出 bad_cast 异常。
带有参考的动态强制类型转换是测试编码假设的良好方法。 在 图 1中,修改了 图 1 中使用的示例以使用引用强制类型转换。图 1。 ILE 源,用于使用引用强制转型获取指向派生类的指针
注: 图 1 仅用于显示用作测试的 dynamic_cast 运算符。 此示例未演示良好的编程样式,因为它使用异常来控制执行流。 将 dynamic_cast 与指针配合使用,如 图 2中所示,是一种更好的方法。
void payroll::calc (employee &re) {
// employee salary calculation
try {
manager &rm = dynamic_cast<manager&>(re);
// use manager::bonus()
}
catch (bad_cast) {
// use employee's member functions
}
}