文章目录
- 一、什么叫继承?
- 二、单继承
- 三、多继承
- 3.1多继承的各种情况
- 3.1.1一般情况
- 3.1.1特殊情况(菱形继承)
- 四、菱形继承引发的问题
- 4.1 问题1:数据冗余
- 4.2 问题2:二义性(无法确定到底是访问哪个)
- 五、虚拟继承解决菱形继承的问题
- 5.1虚拟继承是什么?
- 5.2虚拟继承如何解决二义性和数据冗余?
- 六、继承和组合相对比
- 6.1继承具有高耦合性,低内聚(关联性强)
- 6.2组合具有低耦合高内聚的特性(关联性低)
先赞后看,养成习惯!!!^ _ ^<3 ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!
所属专栏:C++进阶
一、什么叫继承?
继承就是子类继承父类的公有的和保护的成员,子类在C++中被称作派生类,父类也就是基类
细节如下图:
通过监视窗口可以看到son继承了farther的成员,并且son的改变也影响着farther,同时farther的改变也能影响son
如果将基类的成员变成被保护的话,那么只有派生类可以访问到,外面访问不到
二、单继承
下面的图示就是表示单继承的关系
三、多继承
3.1多继承的各种情况
3.1.1一般情况
3.1.1特殊情况(菱形继承)
编译器里面也用了菱形继承,但是在真正工程项目上面基本上用的很少,因为会引发一系列问题
四、菱形继承引发的问题
4.1 问题1:数据冗余
在everyone对象中person成员有两个
4.2 问题2:二义性(无法确定到底是访问哪个)
指定作用域的话就可以访问到,但是造成了数据冗余的问题,还是无法全部解决问题
五、虚拟继承解决菱形继承的问题
5.1虚拟继承是什么?
就是在类前面加一个virtual
5.2虚拟继承如何解决二义性和数据冗余?
如下图B与C对象分别有一个指针,这个指针是指向对象A的地址,可以找出A对象在B和C中成员变量的值, 其中D包含整个BAC(这里的D不仅仅只包含_d的值,图解有点问题)
六、继承和组合相对比
6.1继承具有高耦合性,低内聚(关联性强)
6.2组合具有低耦合高内聚的特性(关联性低)
在一般的项目工程中组合的用处比较多,继承由于高耦合不适用于一些场景,但是后面的多态需要用到它