美文网首页
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