菱形继承

来源:互联网 发布:种族灭绝政策 知乎 编辑:程序博客网 时间:2024/04/23 23:50

分析菱形继承的问题

    C++的特性中最为重要的就是继承和多态,继承的作用比较多,比较重要的就是继承是对类的复用,它不仅在减少了程序开发者的速度,使得一些代码不用重复去写,更重要的就是继承就是一个建模的过程,这样会使程序开发者的思路更加清晰,同样会使程序更加有框架从而变得比较紧密。    继承就是一个新的类在已有类的基础上进行添加一些特有数据或函数从而构成一个包含已有类,但又不同的新类。已有的类我们称之为父类,新类称为子类。子类包含了父类的所有成员函数和数据。而继承并没有规定只能继承一个类,可以同时继承多个类。所以只有一个父类称为单继承,多个父类就称为多继承。    继承可以说是十分有用,但是同样会存在问题,比较典型的就是由于多继承引发的问题—菱形继承。    菱形继承的描述是这样的,同时有两个类继承自一个父类,并且构成了两个不同的新,然后又有一个类采用多继承的方式继承了这两个类。所以由此可以看出最后的这个类包含了两个最开始的父类。在使用的过程中就产生了二义性,系统无法识别应该调用哪个父类。而且存储过程中也占用了两个空间,这就是第二个问题数据冗余。

#剖析虚继承是怎么解决二义性和数据冗余的。
上面描述了菱形继承的问题,接下来就剖析一下解决方法
虚继承
通过上图我们可以看出虚继承会为父类数据多开辟一块空间用来存放父类数据,但是中间两个类的空间依旧存在,那他们存在的意义是什么,通过调试我们可以看到这两个空间存的就是自身位置与存放父类数据的地址的差值,这样我们就能得出结论,他们的存在就是为了找到父类数据。

原创粉丝点击