当前课程知识点:C++语言程序设计进阶 > 第七章 继承与派生 > 导学 > 导学
大家好
欢迎回来继续学习
C++语言程序设计
这一章我们来学习
类的继承
李老师
类的继承其实是程序设计中
非常有用的一个机制
尤其是
当我们写大规模程序的时候
对吧
那么实际上同学们呢
在学了第四章以后
已经能够熟练地定义类
定义对象
大家可能觉得
这就是一种很好的机制
确实已经是很好的机制了
那么同学们很多人就觉得
这个就是类的重用的一种机制了
其实呢
大家有没有想过
如果说
你面临的问题有了新的发展
你需要
对程序进行一些升级的时候
或者你原有的系统
需要扩展到
不同的应用领域的时候
怎么办呢
是不是有的同学
也已经提出过这个问题了
对吧
对
那么在这种情况下呢
其实咱们还有更好的办法
不是说只能原封不动地
死板板地用这个类
或者就作废原来的程序
从头写
那个 没有那个必要
我们这一章呢
要讲的类的继承
就是在原有的类的基础之上
进行扩展
派生出新类
用来解决新的问题
那么同时呢
原有类的功能呢
我们又能完全地拿过来
继承和派生的方法
就类似于我们人类社会中的
子承父业一样
那么基于父亲开创的事业
那儿子一定会站在更高的基础上
能够节省更多的精力了
那么我们的派生和继承
也是完成类似的功能的
但是呢
原有类的功能完全拿过来
它的数据结构设计
也完全拿过来
是不是就直接可用了呢
在被继承的父类中
有私有的数据成员
还有公有的数据成员
还有大家一直不知道有什么用的
保护类的成员
那么当它被派生类继承以后
在派生类里
将会以怎样的方式去访问它们呢
难道是完全一样地照搬过来
使用吗
这个问题
大家可以留着
这一章我们会给大家介绍
不是那么简简单单的
什么都拿过来直接用
李老师
其实咱们在软件开发过程中
那个开发那个基础类库的团队
和使用这个类的团队
很可能不是一个 对吧
不是一个的情况下呢
那我拿类库里面的一个类
来继承来用
那我哪知道它里面的细节
那本来是封装起来的
所以有一些东西
必然是我不能够直接访问的
所以这一章
我们要给大家介绍这样一些细节
继承来的东西到底可以怎么用
还有呢
我们构造一个对象的时候
总希望要能够给它
做一个很好的初始化 对吧
那么从基类继承过来的一些成员
怎么初始化呢
还是那个问题
基类是谁开发的呀
我们都不知道是谁开发的
是的
然后拿来用
那么我哪知道
它有哪些私有成员如何初始化
所以从语法上来讲呢
这就不是派生类的责任
那么在类的继承和派生之后
那么它的构造函数
和析构函数
也会被原样地继承和派生过来吗
事实上不是这样的
但是
在C++的语法机制里
也有很巧妙的办法
能让我们在定义派生类的时候
有办法把初始化的需求和参数
传给基类
让基类的构造函数
自个做初始化
那么好
一个派生类
继承了基类的所有东西以后
那是不是我们就可以拿
派生类对象
就当基类对象来用了呢
在很多的情况下
是可以这样
但是呢
也有例外的情况
就是说我们的继承方式还不同
如果是用公有继承
也就是最常用的一种方式
这是我们同学们
编程序将来会最常用的方式
那么在这种方式下
派生类的对象
就可以充当基类对象用
因此呢
我们在这一章会给大家
一个很有意思的例题
这个例题里面
我们期望去
写一个通用的显示函数
在那里面呢
我们就用基类的指针
去指向不同的派生类对象
然后期望
每一个对象能完成
它自己的功能
这个能不能完成呢
我们等会看
大家学到这一章的内容
就会知道了
问题还是有的
这一章解决不了的问题
咱们留着下一章给大家解决
对吧
还有呢
有的时候我们一下继承了
太多的基类
貌似挺好的
可是这些基类中间
是不是有相同的成员呢
如果有相同名的成员
甚至于它本质上都是一样的东西
继承过来以后
会不会有冲突呢
冲突是会有的
解决冲突的办法呢
也是会有的
这一章都要会给大家介绍
那么经常有同学会问我
那说类的组合呢
类的组合
老师说也可以实现代码的重用
那它和继承和派生有什么区别
是两个是一样的
用这个也可以
用那个也可以
还是说在有的时候
用这种方式好
有的时候用另外一种方式好呢
这确实是一个问题
如果单纯是为了解决问题
那么很多情况下
两种语法是可以互换的
而事实上呢
为了代码的可读性更好
可维护性更好
逻辑更清晰
那么我们在有的时候
会用类的组合
比如说
我们的汽车有一个轮子
那么这个时候
当有了轮子类以后
你把它组合到汽车类里
就是一种非常自然的表达方式
那么
我们之前还声明过交通工具类
那么有了交通工具之后
你还要声明汽车类
那么在这种情况下呢
你用派生的方式就比较自然了
实际上呢
组合和继承有很多共同的地方
有的问题
咱们既能用组合解决
也能用继承解决
尤其是数学中的一些问题
但是呢
大多数情况下
组合的问题是有一个
有一种 has a
继承呢是
是一种 是一个
is a is a kind of
这样的关系
所以呢
我们选择用组合
还是用继承呢
咱们也得尊重问题的本来意义
对吧
但是如果你遇到了既能用组合
又能用继承解决的问题呢
那么首选组合
因为组合的语法相对简单一些
那么这些呢
就是我们这一章要学习的内容
大家是不是觉得很有挑战性
也很有意思呢
我会给大家讲解基本概念
基本语法
以及所有这些验证性的例子
李超老师呢
会给大家讲解实验
还要给大家带来一个
很有意思的综合实例
在综合实例里
我将会把郑老师
给大家讲的各种概念和方法
加以演示和应用
大家敬请期待吧
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义