具有引用的动态强制类型转换

仅限 C + + 语言 dynamic_cast 运算符可用于强制转换为引用类型。 C++ 引用强制转型类似于指针强制转型: 它们可用于将 对基类对象的引用 强制转型为对派生类对象的 引用。

在动态强制转换为引用类型时, type_name 表示类型, 表达式 表示引用。 运算符将表达式转换为期望的类型 type_name&

您无法通过将结果 (动态强制类型转换所产生的引用) 与零进行比较来验证使用引用类型的动态强制类型转换是否成功,因为没有零引用。 失败的动态强制类型转换为引用类型会抛出 bad_cast 异常。

带有参考的动态强制类型转换是测试编码假设的良好方法。 在 图 1中,修改了 图 1 中使用的示例以使用引用强制类型转换。
注: 图 1 仅用于显示用作测试的 dynamic_cast 运算符。 此示例未演示良好的编程样式,因为它使用异常来控制执行流。 dynamic_cast 与指针配合使用,如 图 2中所示,是一种更好的方法。
图 1。 ILE 源,用于使用引用强制转型获取指向派生类的指针
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
   }
}