C++多态的实现原理

静态多态(编译期)

函数重载

  • 允许在同一个作用域中声明多个功能类似的同名函数
  • 函数的参数列表不同(参数个数,参数类型,参数顺序)
  • 注意:不能通过函数返回值区分(name mangling不包括返回值)

原理

  • 预编译:头文件的函数声明拷贝到源文件,避免编译过程找不到函数定义
  • 编译:语法分析,同时进行符号汇总(函数名)
  • 汇编:生成函数名到函数地址的映射,方便之后通过函数名找到函数定义的位置
  • 链接:将多个文件的符号表汇总合并

*objdump -t o

  • _ZN + 类长度+ 类名+ 函数名长度 + 函数名 + E + 类型首字母

模版

  • 编译期间进行实例化
  • 性能要高,避免了运行时的开销

动态多态

虚函数重写,运行时确定

  • 在基类的函数前面加上virtual关键字,派生类重写函数
  • 运行时根据对象的类型调用相应的函数
  • 如果对象的类型是基类,则调用基类的函数
  • 如果对象的类型是派生类,调用派生类的函数

原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值