大学C程序设计教程课件_第1页
大学C程序设计教程课件_第2页
大学C程序设计教程课件_第3页
大学C程序设计教程课件_第4页
大学C程序设计教程课件_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、大学C+程序设计教程西安交通大学计算机教学实验中心大学C+程序设计教程第10章 继承和派生本章目标1掌握继承和派生的概念,派生类的定义方法。2继承的不同方式对基类成员的访问控制3掌握单继承的概念、定义方法、单继承派生类构造函数的执行顺序。4. 理解多继承的概念5. 虚基类的概念和定义1第10章 继承和派生本章目标1授课内容10.1 基类与派生类 10.2 派生类的继承方式 10.3 派生类的构造函数和析构函数 10.4 接口和实现方法的分离10.5 显示访问基类成员10.6 使用this指针2授课内容10.1 基类与派生类 2水果的分类3水果的分类310.1 继承和派生从一个或多个以前定义的类

2、(基类)产生新类的过程称为派生,这个新类又称为派生类。类的继承(inheritance)是指新类从基类那里得到基类的特征,也就是继承基类的数据和函数。派生的新类同时也可以增加或重新定义数据和操作,这就产生了类的层次性。派生就是创建一个具有别的类的属性和行为的新类的能力。派生和继承的概念也来自于人们认识客观世界的过程。410.1 继承和派生从一个或多个以前定义的类(基类)产生新类层次概念客观世界本身是有层次的,人们认识客观世界的过程中,由一般到特殊的演绎思维发挥着巨大作用。演绎的过程在绝大多数情况下就表现为层次分类的过程。继承使得程序员可以在一个较一般的类的基础上很快地建立一个新类,而不必从零开

3、始设计每个类。5层次概念客观世界本身是有层次的,人们认识客观世界的过程中,由继承常用来表示类属关系,不能将继承理解为构成关系。当从现存类中派生出新类时,可以对派生类做如下几种变化: 可以增加新的数据成员; 可以增加新的成员函数; 可以重新定义已有的成员函数; 可以改变现有成员的属性。6继承常用来表示类属关系,不能将继承理解为构成关系。当从现存类基类1基类2基类n派生类1派生类2基类派生类1派生类2(a)多重继承 (b)单继承 一个基类可以直接派生出多个派生类 派生出来的新类同样可以作为基类再继续派生出更新的类,依此类推形成一个层次结构。 多重继承与单继承 如果一个派生类可以同时有多个基类,称为

4、多重继承(multiple-inheritance),这时的派生类同时得到了多个已有类的特征。一个派生类只有一个直接基类的情况称为单一继承(single-inheritance)。7基类1基类2基类n派生类1派生类2基类派生类1派生类2(派生类的定义格式:class 派生类名:访问权限 基类名1,访问限定符 基类名2,访问限定符 基类名n private:成员表1; /派生类增加或替代的私有成员public: 成员表2; /派生类增加或替代的公有成员protected: 成员表3; /派生类增加或替代的保护成员;/分号不可少8派生类的定义格式:class 派生类名:访问权限 基类其中基类1,基

5、类2,是已声明的类。 在派生类定义的类体中给出的成员称为派生类成员,它们是新增加的数据和函数成员。这些新增加的成员是派生类对基类的发展,它们给派生类添加了不同于基类的新的属性和功能。派生类成员包括新添加的,也包括通过屏蔽作用,取代基类成员的更新成员9其中基类1,基类2,是已声明的类。 在派生类定义的类体中 访问控制,亦称为继承方式,是对基类成员进一步的限制。访问控制也是三种:公有(public)方式,保护(protected)方式和私有(private)方式,亦称公有继承、保护继承和私有继承。 编制派生类时可分四步 吸收基类的成员 改造基类成员 发展新成员 重写构造函数与析构函数 派生类中成员

6、的变化不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收 声明一个和某基类成员同名的新成员派生类中的新成员就屏蔽了基类同名成员称为同名覆盖(override) 派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。 10 访问控制,亦称为继承方式,是对基类成员进一步的限制。10.2 派生类的继承方式不可直接访问 不可直接访问 private 不可直接访问 private protected 不可直接访问 private public 私有派生 不可直接访问 不可直接访问 private 不可直接访问 protected protected 可直接访问 public p

7、ublic 公有派生 外部函数void main ( )在派生类中对基类成员的访问限定 基类中的访问限定 派生方式 在派生类的定义中,基类前所加的访问限定符有两方面含义:派生类成员(新增成员)函数对基类(继承来的)成员的访问(调用和操作),和从派生类对象之外对派生类对象中的基类成员的访问。公有派生是绝对主流。 1110.2 派生类的继承方式不可直接访问 不可直接访问 pr实例:公有继承(public) class Person/人员类定义protected:char Name10;/姓名intAge;/年龄charSex;/性别 public:void Register(char *name,

8、 int age, char sex) ;void ShowMe();12实例:公有继承(public) class Person/class Employee: public Person /雇员类定义char Dept20;/工作部门float Salary; /月薪public: Employee() ;void EmployeeRegister(char *name, int age, char sex, char *dept, float salary);void ShowEmp(); /显示雇员信息 ;13class Employee: public Person 保护继承(pub

9、lic)保护继承方式创建的派生类对基类各种成员访问权限如下 :基类的公有成员和保护成员都相当于派生类的保护成员,派生类可以通过自身的成员函数或其子类的成员函数访问他们对于基类的私有成员,无论派生类内部成员或派生类使用者都无法直接访问 14保护继承(public)保护继承方式创建的派生类对基类各种10.3 派生类的构造函数和析构函数派生类构造函数的一般形式为:派生类名:派生类名(参数总表):基类名1(参数表1),基类名n(参数表n),内嵌对象名1(对象参数表1),内嵌对象名m(对象参数表m)派生类新增加成员的初始化;派生类与基类的析构函数没有什么联系,彼此独立,派生类或基类的析构函数只作各自类对

10、象消亡前的善后工作1510.3 派生类的构造函数和析构函数派生类构造函数的一般形式派生类构造函数各部分的执行次序为:1.调用基类构造函数,按它们在派生类定义的先后顺序,顺序调用。 2.调用内嵌对象构造函数,调用次序按各个对象在派生类内声明的顺序。3.派生类的构造函数体中的操作。*在派生类构造函数中,只要基类不是使用缺省构造函数都要显式给出基类名和参数表。如果基类没有定义构造函数,则派生类也可以不定义,全部采用系统给定的缺省构造函数。如果基类定义了带有形参表的构造函数时,派生类就应当定义构造函数。16派生类构造函数各部分的执行次序为:1.调用基类构造函数,按它例10-3 派生类构造函数和析构函数

11、的执行 #include #include class Person char Name10; intAge;public:Person(char* name,int age) strcpy(Name, name);Age = age;coutconstructor of personNameendl; Person() coutdeconstrutor of personNameendl;17例10-3 派生类构造函数和析构函数的执行 #includeclass Employee : public Personchar Dept20;PersonWang;public:Employee(ch

12、ar *name, int age, char *dept, char *name1, int age1): Person(name,age) , Wang(name1,age1)strcpy(Dept, dept);coutconstructor of Employeeendl;Employee() coutdeconstrucor of Employeeendl; ;18class Employee : public Personint main() Employee emp(张弓长,40,人事处,李木子,36);return 0;19int main()19派生类构造函数的执行次序首先,

13、调用基类构造函数,调用顺序按照它们被继承时声明的基类名顺序执行。其次,调用内嵌对象构造函数,调用次序按各个对象在派生类内声明的顺序。最后,执行派生类构造函数体中的内容。 20派生类构造函数的执行次序首先,调用基类构造函数,调用顺序按照析构函数 派生类析构函数执行过程恰与构造函数执行过程相反。首先执行派生类析构函数然后执行内嵌对象的析构函数最后执行基类析构函数 21析构函数 派生类析构函数执行过程恰与构造函数执行过程相反。2自学内容接口与实现方法的分离显式访问基类成员this指针22自学内容接口与实现方法的分离22程序设计举例例10-6 一个基类及其两个派生类例10-7 多重继承,从多个基类派生出来的类class Derived : public Base1, public Base2double real; public:Derived( int, char, double );double getReal() const;void Output(); 23程序设计举例例10-6 一个基类及其两个派生类23编程实例:棋子类class ChineseStone : public Stonechar strType10;/ 棋子类型intR;/ 棋子半径public:ChineseSt

温馨提示

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

评论

0/150

提交评论