C++ 面试题
目录

C++ 中如何实现运行时多态 (RTTI)?

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

推荐答案

在C++中,运行时多态(RTTI,Run-Time Type Information)主要通过以下两种机制实现:

  1. 虚函数(Virtual Functions):通过基类指针或引用调用派生类的重写函数。
  2. typeid 运算符:用于获取对象的实际类型信息。

示例代码

本题详细解读

1. 虚函数(Virtual Functions)

虚函数是实现运行时多态的核心机制。通过在基类中声明虚函数,并在派生类中重写这些函数,可以在运行时根据对象的实际类型调用相应的函数。

  • 虚函数表(VTable):每个包含虚函数的类都有一个虚函数表,表中存储了指向实际函数的指针。当通过基类指针或引用调用虚函数时,程序会根据对象的实际类型查找虚函数表,并调用正确的函数。
  • override 关键字:C++11引入了override关键字,用于显式标记派生类中重写的虚函数,避免因函数签名不匹配而导致的错误。

2. typeid 运算符

typeid 运算符用于在运行时获取对象的类型信息。它返回一个std::type_info对象,其中包含了类型的名称等信息。

  • typeid 的使用场景:通常用于调试、日志记录或类型检查。需要注意的是,typeid 只能用于多态类型(即包含虚函数的类),否则返回的是静态类型信息。
  • type_info 类:typeid 返回的对象是std::type_info类型的实例,可以通过name()方法获取类型的名称。

3. 运行时多态的应用

运行时多态在C++中广泛应用于以下场景:

  • 接口设计:通过基类定义接口,派生类实现具体功能,从而实现灵活的代码扩展。
  • 工厂模式:通过基类指针返回不同类型的派生类对象,隐藏具体实现细节。
  • 动态类型检查:在需要根据对象类型执行不同操作的场景中,使用typeid进行类型判断。

通过虚函数和typeid的结合使用,C++实现了强大的运行时多态机制,使得程序能够在运行时根据对象的实际类型执行相应的操作。