菱形继承以及菱形继承中的多态问题
- 一、对象模型
- (一)菱形继承 & 菱形虚拟继承
- (一)菱形继承中多态 & 菱形虚拟继承中多态
- 二、总结
本文主要叙述菱形继承、菱形虚拟继承、菱形继承中多态、菱形虚拟继承中多态,这四种情况下的对象模型,这里的多态主要指的是虚函数指针以及虚函数表在对象模型中是怎样继承的
一、对象模型
(一)菱形继承 & 菱形虚拟继承
(一)菱形继承中多态 & 菱形虚拟继承中多态
二、总结
1、菱形继承:数据是独有的,各自都有一份
2、菱形虚拟继承:当会发生数据冗余的时候,数据是共享的,共享同一份数据
3、非菱形继承中虚函数指针继承情况:单继承中会继承父类虚函数指针,自己类中的虚函数地址存放在继承下来的虚函数指针所指向的虚函数表中;多继承中继承几个父类就继承几个虚函数指针,自己类中的虚函数地址存放在第一个继承下来的虚函数指针所指向的虚函数表中。注意:这里说的虚函数指针继承意思是我也会有一个虚函数指针,并不代表虚函数里面的值都是一样的(每个类都有一个各自的虚函数表,实例化的对象指向自己类的虚函数表)
4、菱形继承和虚拟继承中虚函数指针继承情况:菱形继承中虚函数指针依旧遵循菱形继承规则+虚函数指针单继承&多继承规则,菱形虚拟继承中虚函数指针在单继承中会有自己独有的虚函数指针比较特殊