C面向对象程序设计_第1页
C面向对象程序设计_第2页
C面向对象程序设计_第3页
C面向对象程序设计_第4页
C面向对象程序设计_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、包头钢铁职业技术学院教师教案课程C+面向对象程序设计班级计算机应用计算机网络学期课时8学时累计课时8学时教师上课日期课程类型理论,实验。课程名称(章、节)第5章 类的继承与派生5.1 继承与派生5.2 继承的三种方式5.3 派生类的构造函数和析构函数5.4 多继承和虚基类5.5 赋值兼容规则教学目的要 求掌握继承与派生概念、继承的三种方式、派生类的构造函数和析构函数、多继承和虚基类的概念、赋值兼容规则。教学重点继承与派生概念、继承的三种方式、派生类的构造函数和析构函数、虚基类的概念教学难点继承的三种方式、派生类的构造函数和析构函数、多继承和虚基类的概念主要教具设备材料多媒体及计算机实验室。教

2、学 内 容 与 板 书备 注第5章 类的继承与派生5.1 继承与派生l 5.1.1 基类与派生类l 5.1.2 派生类的声明l 5.1.3 派生类生成过程5.1.1 基类与派生类l 以原有的类为基础产生新类,我们就说从原有的类派生出新类。在这个过程中原有的类称为基类,新类称为派生类。l 汽车类派生出卡车类。在此过程中,我们称汽车类为基类,卡车类为汽车类的派生类。l 面向对象程序设计提供了类的继承机制,该机制自动的为派生类提供了其基类的操作和属性,大大的提高了代码的重用率。 交通工具汽 车旅 游 车卡 车小汽车面 包 车 轿 车工 具 车交通工具分类层次图人类: 姓名、性别、年龄、身高、体重教师

3、类: 姓名、性别、年龄、身高、体重、专业、职称管理人员类: 姓名、性别、年龄、身高、体重、职务教师管理人员类: 姓名、性别、年龄、身高、体重、专业、职称、职务学生类: 姓名、性别、年龄、身高、体重、学号、班级、专业第五章授课内容计划为8学时,应把握悉继承的三种方式、派生类的构造函数和析构函数、多继承和虚基类的概念包头钢铁职业技术学院 教 师 教 案包头钢铁职业技术学院 教 师 教 案教 学 内 容 与 板 书备 注间接基类人 类单继承:派生类只有一个基类管理人员类学生类教师类直接基类多继承:派生类有多个基类教师管理类继承与派生的目的l 继承的目的:实现代码重用。l 派生的目的:当新的问题出现,

4、原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。5.1.2 派生类的声明l C+中声明派生类的形式为:class 派生类名: 继承方式 基类名1, 继承方式 基类名2, ,继承方式 基类名n 派生类的成员声明;l 声明中的“基类名”是已经存在的类的名称,“派生类名”是在已存在的类的基础上通过添加成员而得到的新类。当派生类只有一个直接基类的继承情况,称为单继承。当派生类同时有多个基类的继承情况,称为多继承。派生类1派生类1基类2基类n基类基类1多继承和单继承包头钢铁职业技术学院 教 师 教 案教 学 内 容 与 板 书备 注5.1.3 派生类生成过程l 派生类生成过程中需要指定派生

5、类的类名,继承方式和新增成员。l 派生类的生成过程可分为三个步骤:吸收基类成员改造基类成员和添加新的成员。 吸收基类成员:将基类除构造函数和析构函数以外的成员全部接受。 改造基类成员:根据继承方式决定基类成员在派生类中的访问控制问题。 添加新的成员:派生类新增成员是派生类不同于基类的地方,也是继承和派生机制的关键所在。5.2 继承的三种方式l 5.2.1 公有继承l 5.2.2 私有继承l 5.2.3 保护继承5.2.1 公有继承l 类的继承方式为公有继承的时候,基类的公有和保护成员在派生类中访问权限不变,而基类的私有成员在派生类中不可直接访问。l 公有继承的应用举例。class Circle

6、: public Pointprivate:float r; public:void Start(float X, float Y, float R) Point:Start(X,Y); r=R; float GetR() return r;5.2.2 私有继承l 类的继承方式为私有继承的时候,基类中的公有和保护成员被吸收后成为派生类的私有成员,而基类的私有成员在派生类中不可直接访问。l 私有继承应用举例。class Circle: private Pointprivate:float r; public:void Start(float X, float Y, float R) Point:

7、Start(X,Y); r=R; float GetX() return Point:GetX(); float GetY() return Point:GetY();5.2.3 保护继承l 当类的继承方式为保护继承的时候,基类中的公有和保护成员被吸收后成为派生类的保护成员,而基类中的私有成员在派生类中不可直接访问。保护继承的例子。包头钢铁职业技术学院 教 师 教 案教 学 内 容 与 板 书备 注class Circle: protected Point private: float r;public: void Start(float X, float Y, float R) Point:

8、Start(X,Y); r=R; float GetR() return r; float GetY() return Point:GetY();基类与派生类的对应关系l 单继承 派生类只从一个基类派生。l 多继承 派生类从多个基类派生。 l 多重派生 由一个基类派生出多个不同的派生类。 l 多层派生 派生类又作为基类,继续派生新的类。 5.3 派生类的构造函数和析构函数l 5.3.1 构造函数l 5.3.2 析构函数5.3.1 构造函数l 因为基类的构造函数不被继承,派生类中需要声明自己的构造函数。l 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化,自动调用基类

9、构造函数完成。l 派生类的构造函数需要给基类的构造函数传递参数l 派生类对象在定义的时候要调用派生类的构造函数进行初始化工作,也就是为派生类对象的数据成员赋初值。l 构造函数的作用是在对象被创建时用特定的方式构造对象,将对象初始化为一个特定的状态,使此对象具有区别于其它对象的特征。l 派生类对象的数据成员包括从基类继承的数据成员和派生类新增的数据成员,如果派生类有内嵌对象作为数据成员,那么派生类的数据成员还包括内嵌对象的数据成员。派生类对象定义的时候,构造函数需要完成上述数据成员的初始化工作。l 派生类构造函数声明一般语法如下:单一继承时的构造函数包头钢铁职业技术学院 教 师 教 案教 学 内

10、 容 与 板 书备 注派生类名:派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表) 本类成员初始化赋值语句;多继承时的构造函数派生类名:派生类名(基类1形参,基类2形参,.基类n形参,本类形参):基类名1(参数), 基类名2(参数), .基类名n(参数) 本类成员初始化赋值语句;l 当基类中声明有默认形式的构造函数或未声明构造函数时,派生类构造函数可以不向基类构造函数传递参数。l 若基类中未声明构造函数,派生类中也可以不声明,全采用缺省形式构造函数。l 当基类声明有带形参的构造函数时,派生类也应声明带形参的构造函数,并将参数传递给基类构造函数。多继承且有内嵌对象时的构造函数派生类

11、类名:派生类类名(参数列表): 基类名1(参数列表1),基类名m(参数列表m), 内嵌对象名1(内嵌对参数列表1),内嵌对象n(内嵌对象参数列表n)派生类新增成员的初始化;派生类构造函数初始化时先调用基类构造函数完成从基类继承数据成员的初始化,接着调用内嵌对象的构造函数完成内嵌对象数据成员的初始化,最后才调用派生类构造函数完成新增数据成员的初始化。.3.1 构造函数l 派生类构造函数应用举例。 class GraduateStudent:public Studentprotected:int gCount; public:GraduateStudent(int gN,float gG,int

12、gC):Student(gN,gG)coutConstructing GraduateStudentn;gCount=gC;包头钢铁职业技术学院 教 师 教 案教 学 内 容 与 板 书备 注.3.2 析构函数l 析构函数也不被继承,派生类自行声明l 声明方法与一般(无继承关系时)类的析构函数相同。l 不需要显式地调用基类的析构函数,系统会自动隐式调用。l 析构函数的调用次序与构造函数相反。l 派生类的析构函数是在派生类对象生命期结束之前对派生类新增的数据成员完成必要的清理工作。- 析构函数的作用与构造函数几乎正好相反,它在对象删除前被自动调用,来完成一些清理工作,也就是一些扫尾工作。 - 派

13、生类析构函数执行顺序和构造函数刚好相反:首先对派生类新增一般数据成员进行清理工作,接着对派生类内嵌对象成员进行清理工作,最后才是对基类继承的成员进行清理。这一点,大家可以根据栈区“先进后出” 的特性来理解。- 派生类析构函数应用举例。class GraduateStudent: public Studentprotected:int gCount; public: GraduateStudent()coutDestructing GraduateStudentn;5.4 多继承和虚基类 l 5.4.1 派生类成员的标识与访问 l 5.4.2 作用域分辨 l 5.4.3 多继承和虚基类 l 5.

14、4.4 虚基类及其派生类的构造函数 5.4.1 派生类成员的标识与访问 l 派生类吸收了基类除构造函数和析构函数以外的所有成员,并添加新成员得到的类。按照派生类对象能否直接访问可以把派生类数据成员分为两种。包头钢铁职业技术学院 教 师 教 案教 学 内 容 与 板 书备 注 可见成员。派生类的可见成员也就是派生类的公有成员:派生类从基类继承的公有成员和派生类新增的公有成员. 不可见成员。派生类的不可见成员就是派生类的私有成员和保护成员:派生类从基类继承的私有、保护成员和派生类新增的私有、保护成员。5.4.2 作用域分辨 l 作用域分辨解决的是派生类中的同名覆盖现象。 派生类声明了和基类同名的新

15、成员(如果是函数成员则所带参数必须相同,否则就是函数重载),派生类的新成员就覆盖了从基类继承的同名成员。直接访问只能访问派生类新增成员。为了能够访问基类同名成员,我们采用了作用域分辨符来完成这个任务。l 作用域分辨符的使用形式:基类名:成员名; /数据成员基类名:成员名(参数表); /函数成员5.4.3 多继承和虚基类l 多继承是指一个派生类同时有多个直接基类,即一个派生类对象含有多个基类数据成员的拷贝。由于多层次的交叉派生关系,多继承中一个派生类可能保留某个基类的多个实例。l 虚基类就是为了解决多继承时一个派生类可能保留某个基类多个拷贝的问题。采用虚基类的派生方式保证了在多继承中某个基类的拷

16、贝只出现一次。AAAABACBCCBCBDDDD(a)非虚基类 (b)虚基类包头钢铁职业技术学院 教 师 教 案教 学 内 容 与 板 书备 注5.4.4 虚基类及其派生类的构造函数 l 如果虚基类定义有带参数的构造函数,那么派生类一定要定义带参数的构造函数。l 如果派生类对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数,进行初始化。5.5 赋值兼容规则 l 赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。l 赋值兼容规则替代的几种情况: 派生类的对象可以赋值给基类对象。 派生类的对象可以初始化基类的引用。 派生类的对象的地址可以赋给指向基类的指针。 赋值兼容规则应用举例。class Student;class MiddleStudent: public Student;class GraduateStudent: public MiddleStudent;Student *ps; MiddleStudent ms; GraduateStudent gs; ps=&ms; ps=&gs; 习题五1.比较类的三种继承方式公有继承,保护继承和私有继承之间的区别,并画

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论