一:学习笔记

本章围绕面向对象核心特性继承展开,系统讲解了派生类相关完整知识体系。继承是实现代码复用、搭建类层次关系的核心手段,被复用的类称为基类,拓展出新功能的类是派生类,编写派生类时需要指定对应的继承方式,同时要分清继承与组合的适用场景,继承代表事物间 “是一种” 的从属关系,组合代表 “拥有” 的包含关系,开发中应当优先使用耦合度更低的组合,仅在描述分类层级时选用继承。继承分为公有、私有、保护三种方式,公有继承是实际开发里最常用的形式,会保留基类公有与保护成员原有访问权限,也是唯一支持类型兼容转换的继承方式;私有继承会将基类公有、保护成员全部转为派生类私有成员,中断后续继承访问链条,使用场景极少;保护继承会把基类公有成员转为保护成员,仅允许自身与后代派生类访问,多用于内部多层封装。派生类不能在构造函数函数体内调用基类构造函数,只能依靠初始化列表完成调用,对象创建时会先构造基类,再初始化派生类自身成员,最后执行派生类构造函数体,销毁对象时析构顺序与构造完全相反,先释放派生类资源再析构基类,无需手动调用基类析构函数。公有继承带来的类型兼容特性允许派生类对象、指针或引用向上赋值给基类,这也是后续实现多态的基础,但无法反向将基类直接转为派生类。派生类可以同时继承多个基类实现多继承,构造顺序按照继承声明从左到右执行,不过多继承容易引发同名成员的二义性问题,可通过添加类作用域限定符区分调用对象,而菱形多继承结构会造成公共基类生成多份副本,带来数据冗余与访问冲突,此时可以通过 virtual 关键字定义虚基类,让整个继承体系中只存在一份公共基类数据,虚基类的构造规则区别于普通继承,由最底层派生类直接完成初始化,保证虚基类仅构造一次。

二:学习心得
学习本章后我改变了过去重复复制类代码的编程习惯,懂得将各类事物通用的属性与函数抽象至基类,子类只补充独有的业务逻辑,大幅精简冗余代码。初期学习时很容易混淆三种继承的权限变化规则,也经常误将基类构造写在派生类构造函数体内,经过多次代码调试练习才吃透语法与执行逻辑,理解构造析构固定顺序是为保障内存资源使用安全。多继承虽然功能强大,但会大幅降低代码可读性,衍生出各类隐藏问题,即便虚基类可以解决菱形继承缺陷,复杂多层继承依旧不利于后期维护,因此日常设计要尽量规避多继承,采用单继承搭配组合完成开发需求。同时我发现本章内容和后续多态知识点紧密衔接,类型兼容是虚函数实现多态的前置条件,知识点无法割裂学习。后续我会多编写单继承、多继承、虚基类测试代码,打印构造析构执行流程巩固记忆,严格遵循少继承、多组合的设计思路,写出结构清晰、低耦合的面向对象程序。整体来看继承完成了类的分层抽象与代码复用,合理选择继承方式、控制继承层级能够简化程序开发,而过度复杂的继承体系会埋下潜在 bug,类设计时需要权衡继承与组合的取舍。

更多推荐