C++怎么实现多态

4 分钟阅读 459 字 + 448 词
参考答案
  1. C++ 的多态分为 编译时多态 (也被称为静态多态)和 运行时多态 (也被称为动态动态)
  2. 编译时多态
  • 函数 重载 Function Overloading ):允许在同一作用域内声明多个同名函数,只要它们的参数列表不同。
  • 运算符重载 Operator Overloading ): 允许为自定义类型定义或修改运算符的行为。
  • 模板 Templates ): 允许创建泛型类和函数,它们可以在多种数据类型上使用。
== 编译时多态在编译期间就确定了具体的函数或类型,由编译器根据函数的签名或模板实例化来选择正确的函数或实例。 ==
  1. 运行时多态: 运行时多态主要通过 虚函数 和抽象类实现, 父类中定义声明虚函数,子类实现对虚函数的重写。由虚函数表和虚函数指针在运行时确定调用哪个函数。
  • 虚函数( Virtual Functions ): 虚函数在基类定义,派生类可以 重写 这些虚函数。
  • 抽象类( Abstract Classes ): 包含至少一个纯虚函数的类,不能被实例化,但可以作为其他类的基类。
  1. 运行时多态实现原理:
  • 运行时多态涉及到 虚函数表( **vtable** 虚函数指针 vptr )。当类包含虚函数时, 编译器会自动为该类创建一个虚函数表,表中包含类中所有虚函数的地址。
  • 子类的虚函数表继承了父类的虚函数表,但会使用自己重写的虚函数将虚函数表中对应的虚函数进行覆盖。
  • 当通过基类指针或引用调用虚函数时,程序会根据对象的实际类型在运行时查找正确的函数地址并调用相应的函数,实现多态。