美文网首页
C++虚继承的内存布局

C++虚继承的内存布局

作者: JaJIng | 来源:发表于2019-03-05 21:34 被阅读0次

C++的继承主要分几种:

A:单继承,除了C++的所有OO语言基本都是单根了

B:散状多继承,这个也比较好理解,基类之间无关联

C:钻石多继承,出现冲突语义

D:钻石虚继承,解决语义冲突

以下几张图很好的演示了这几种继承:

A

1.1单继承关系: 1.2单继承内存布局:

最简单的单继承,java就是这种

B

2.1散状多继承关系: 2.2散状多继承内存布局:

这里父类的函数都是虚函数,被子类重写了,以实现多态。(java的所有函数都是默认虚函数)

C

3.1钻石💎多继承: 3.1钻石💎多继承内存布局:

 红色部分就是冲突语义部分,因为B1,B2都有继承B

D

4.1钻石虚继承关系: 4.2钻石虚继承内存布局:

多了一个B类指针,把B类的成员变量分离开了。这也是B1,B0分别 virtual :继承B的结果

相关文章

网友评论

      本文标题:C++虚继承的内存布局

      本文链接:https://www.haomeiwen.com/subject/erjauqtx.html