C++ 面试题
目录

C++ 中 dynamic_cast 和 typeid 的用法?

· 约 3 分钟读完 · 第 13 / 181 章

推荐答案

本题详细解读

dynamic_cast 的用法

dynamic_cast 是 C++ 中用于在继承层次结构中进行类型转换的操作符。它主要用于将基类指针或引用安全地转换为派生类指针或引用。dynamic_cast 在运行时检查转换的有效性,如果转换不合法,它会返回 nullptr(对于指针)或抛出 std::bad_cast 异常(对于引用)。

  • 适用场景:dynamic_cast 通常用于多态类型(即包含虚函数的类)的向下转型(从基类指针或引用转换为派生类指针或引用)。
  • 注意事项:dynamic_cast 只能用于具有虚函数的类,因为它依赖于运行时类型信息(RTTI)。

typeid 的用法

typeid 是 C++ 中用于获取对象类型信息的操作符。它返回一个 std::type_info 对象,该对象包含类型的名称等信息。

  • 适用场景:typeid 通常用于在运行时确定对象的实际类型,特别是在多态场景下。
  • 注意事项:typeid 也可以用于非多态类型,但在多态类型上使用时,它会返回对象的实际派生类型。

代码解析

  1. Base 类:定义了一个基类 Base,并为其添加了一个虚析构函数,以确保 Base 类是多态的。
  2. Derived 类:定义了一个派生类 Derived,继承自 Base。
  3. dynamic_cast:在 main 函数中,使用 dynamic_cast 将 Base* 类型的指针 basePtr 转换为 Derived* 类型的指针 derivedPtr。如果转换成功,derivedPtr 将指向 Derived 对象,否则返回 nullptr。
  4. typeid:使用 typeid 获取 basePtr 和 derivedPtr 所指向对象的实际类型,并输出类型名称。

通过这段代码,可以清楚地看到 dynamic_cast 和 typeid 在多态类型中的应用。