多态实现原理

1. 静态多态(编译时)

(1)函数重载

        注:如果函数名,参数名一致,但是返回类型不一致,那么会出错。

        函数重载

(2)模板特例化

        模板泛型编程

2. 运行时多态

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

参考

【【C++面试题】面试官:请简述多态实现的原理】

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值