多态实现的原理
首先多态实现必须依赖于两个条件:
1)子类重写父类的虚函数
2)必须通过基类的指针或者引用来调用虚函数
实现多态的机制是通过虚函数表(函数指针的指针数组)来实现的,虚表的最后是一个nullptr
虚表的构建过程:
1)子类拷贝父类的虚表
2)进行重写过的函数指针进行相同偏移量位置的替换
3)将新增的虚函数添加在虚表结尾
key:多继承未重写的虚函数放在第一个继承基类部分的虚函数表中
构造函数和析构函数可以声明为虚函数嘛?
构造函数不能声明为析构函数:虚函数的意思就是开启动态绑定,程序会根据动态类型来选择调用的方法,而如果将构造函数声明为虚函数,那我们将无法确认对象继而进行动态绑定,换句话说就是说无法实现构造,那么虚函数的虚表就无法构建
析构函数可以声明为虚函数:在类的继承中,如果基类指针指向派生类,那么用基类指针delete时,如果不定义虚函数,派生类中的派生部分将无法进行析构