多重继承与虚函数联系起来会出现很多的问题:
1.继承类有几份虚表?
2.继承类新添加的虚函数会放到基类1的虚表?还是基类2的虚表?还是都放?
3.将基类对象指针动态转化为继承类指针的大概过程?
我们通过下面的例子来一一解答:
两个基类Base1,Base2,一个派生类Test公有继承这两个类,既有重写的虚函数,也有新添加的虚函数
1.继承类有几份虚表?
我们运行一下程序来看一下监视器:
结论:当派生类继承了多少个基类,就会有几份虚表。
2.继承类新添加的虚函数会放到基类1的虚表?还是基类2的虚表?还是都放?
结论:继承类中新添加的虚函数只会添加到第一个继承的基类的虚表之中
3.将基类对象指针动态转化为继承类指针的大概过程?
将先继承的基类指针动态转化为继承类指针
将后继承的基类指针动态转化为继承类指针
总结:
在多重继承中,继承类共有继承个数个虚表
继承类新添加的虚函数会放在第一个继承的基类虚表中
在多重继承中,将基类指针动态转化为继承类指针时
先去查看此基类对象的虚表,判断是否可以转化
如果不可以:返回NULL
如果可以:
①获取指针偏移量信息(type_info类型信息中保存)
②将指针向上偏移偏移量大小的字节,并返回