关于多态实现的一些问题

多态实现的原理

首先多态实现必须依赖于两个条件:

1)子类重写父类的虚函数

2)必须通过基类的指针或者引用来调用虚函数

实现多态的机制是通过虚函数表(函数指针的指针数组)来实现的,虚表的最后是一个nullptr

虚表的构建过程:

1)子类拷贝父类的虚表

2)进行重写过的函数指针进行相同偏移量位置的替换

3)将新增的虚函数添加在虚表结尾

key:多继承未重写的虚函数放在第一个继承基类部分的虚函数表中

 

构造函数和析构函数可以声明为虚函数嘛?

构造函数不能声明为析构函数:虚函数的意思就是开启动态绑定,程序会根据动态类型来选择调用的方法,而如果将构造函数声明为虚函数,那我们将无法确认对象继而进行动态绑定,换句话说就是说无法实现构造,那么虚函数的虚表就无法构建

析构函数可以声明为虚函数:在类的继承中,如果基类指针指向派生类,那么用基类指针delete时,如果不定义虚函数,派生类中的派生部分将无法进行析构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值