1. 静态多态(编译时)
(1)函数重载
注:如果函数名,参数名一致,但是返回类型不一致,那么会出错。
(2)模板特例化
2. 运行时多态
- 基于虚函数重写。基类的函数名前加virtual关键字,派生类重写该函数。如果使用了virtual关键字,就会生成虚函数表。
- 动态多态(动态联编,动态绑定,一个意思)
- 虚函数表指针在构造函数中就初始化完成,指向虚函数表。
- 虚函数表,存放虚函数地址的数组,编译时产生,存在于只读数据段(.rodata);具体的虚函数代码在代码段(.text)中。虚函数表指针,跟对象相关。
- 虚函数表的创建时机:编译时期。编译时发现类中带有virtual关键字,虚函数表是存放虚函数地址的数组(.rodata).
-
虚函数表指针,类对象构建时创建,也就是运行时创建。构造函数中自动实现,将表地址赋给vptr。继承下,具体过程:调用基类构造时,先将基类虚函数表地址赋值;然后调用子类构造函数时,又将子类虚函数表赋值给vptr。
参考