C++多态原理剖析

文章介绍了多态的两种主要形式:静态多态,包括函数重载和运算符重载,其函数地址在编译阶段绑定;以及动态多态,通过派生类和虚函数实现在运行时的多态性。虚函数的实现依赖于vftable和vfptr,允许根据对象的实际类型在运行时动态绑定和调用相应函数。
摘要由CSDN通过智能技术生成

多态分为两类

  • 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名

  • 动态多态: 派生类和虚函数实现运行时多态

静态多态和动态多态区别:

  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址,使用函数的时候是根据其编译类型确定的如何执行

  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址,使用函数的时候是根据其运行类型确定的如何执行(虚函数)

  • //虚函数的地址不会在编译的时候确定,而是在运行的时候根据运行类型来动态确定,这样就能实现动态绑定,就是根据调用者的运行类型来确定具体是那个类型的方法

具体分析:

 

虚函数的具体实现原理:

 

 

 

子类重写了父类的虚函数之后,会覆盖掉vftable中父类的虚函数

 

 运行的时候会通过vfptr找到vftable中的函数,就是具体调用的哪个函数。

如此,就能够实现运行时,通过运行类型来确定是那个作用域下的函数,实现了动态绑定。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值