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的结果
网友评论