大学C程序设计教程ppt课件

上传人:风*** 文档编号:252420550 上传时间:2024-11-15 格式:PPT 页数:26 大小:148.51KB
返回 下载 相关 举报
大学C程序设计教程ppt课件_第1页
第1页 / 共26页
大学C程序设计教程ppt课件_第2页
第2页 / 共26页
大学C程序设计教程ppt课件_第3页
第3页 / 共26页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,/25,大学C+程序设计教程,西安交通大学,计算机教学实验中心,http:/,大学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,水果的分类3,10.1 继承和派生,从一个或多个以前定义的类(基类)产生新类的过程称为派生,这个新类又称为派生类。,类的继承(inheritance)是指新类从基类那里得到基类的特征,也就是继承基类的数据和函数。,派生的新类同时也可以增加或重新定义数据和操作,这就产生了类的层次性。,派生就是创建一个具有别的类的属性和行为的新类的能力。派生和继承的概念也来自于人们认识客观世界的过程。,4,10.1 继承和派生从一个或多个以前定义的类(基类)产生新类,层次概念,客观世界本身是有层次的,人们认识客观世界的过程中,由一般到特殊的演绎思维发挥着巨大作用。演绎的过程在绝大多数情况下就表现为层次分类的过程。继承使得程序员可以在一个较一般的类的基础上很快地建立一个新类,而不必从零开始设计每个类。,5,层次概念客观世界本身是有层次的,人们认识客观世界的过程中,由,继承常用来表示类属关系,不能将继承理解为构成关系。当从现存类中派生出新类时,可以对派生类做如下几种变化:,可以增加新的数据成员;,可以增加新的成员函数;,可以重新定义已有的成员函数;,可以改变现有成员的属性。,6,继承常用来表示类属关系,不能将继承理解为构成关系。当从现存类,基类1,基类2,基类n,派生类1,派生类2,基类,派生类1,派生类2,(,a,)多重继承,(,b,)单继承,一个基类可以直接派生出多个派生类,派生出来的新类同样可以作为基类再继续派生出更新的类,依此类推形成一个,层次结构,。,多重继承与单继承,如果一个派生类可以同时有多个基类,称为多重继承(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,基类2,是已声明的类。在派生类定义的类体中给出的成员称为派生类成员,它们是新增加的数据和函数成员。这些新增加的成员是派生类对基类的发展,它们给派生类添加了不同于基类的新的属性和功能。派生类成员包括新添加的,也包括通过屏蔽作用,取代基类成员的更新成员,9,其中基类1,基类2,是已声明的类。在派生类定义的类体中,访问控制,,亦称为,继承方式,,是对基类成员进一步的限制。访问控制也是三种:,公有(,public,)方式,保护(,protected,)方式和私有(,private,)方式,,亦称公有继承、保护继承和私有继承。,编制派生类时可分四步,吸收基类的成员,改造基类成员,发展新成员,重写构造函数与析构函数,派生类中成员的变化,不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收,声明一个和某基类成员同名的新成员派生类中的新成员就屏蔽了基类同名成员称为同名覆盖(override),派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。,10,访问控制,亦称为继承方式,是对基类成员进一步的限制。,10.2 派生类的继承方式,不可直接访问,不可直接访问,private,不可直接访问,private,protected,不可直接访问,private,public,私有派生,不可直接访问,不可直接访问,private,不可直接访问,protected,protected,可直接访问,public,public,公有派生,外部函数void main(),在派生类中对基类成员的访问限定,基类中的访问限定,派生方式,在派生类的定义中,基类前所加的访问限定符有两方面含义:,派生类成员(新增成员)函数对基类(继承来的)成员的访问(调用和操作),,和,从派生类对象之外对派生类对象中的基类成员的访问,。,公有派生是绝对主流,。,11,10.2 派生类的继承方式不可直接访问 不可直接访问 pr,实例:公有继承(public),class Person/人员类定义,protected:,char Name10;/姓名,intAge;/年龄,charSex;/性别,public:,void Register(char*name,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();/显示雇员信息,;,13,class Employee:public Person,保护继承(public),保护继承方式创建的派生类对基类各种成员访问权限如下:,基类的公有成员和保护成员都相当于派生类的保护成员,派生类可以通过自身的成员函数或其子类的成员函数访问他们,对于基类的私有成员,无论派生类内部成员或派生类使用者都无法直接访问,14,保护继承(public)保护继承方式创建的派生类对基类各种,10.3 派生类的构造函数和析构函数,派生类构造函数的一般形式为:,派生类名:派生类名(参数总表):基类名1(参数表1),基类名n(参数表n),,内嵌对象名1(对象参数表1),内嵌对象名m(对象参数表m),派生类新增加成员的初始化;,派生类与基类的析构函数没有什么联系,彼此独立,派生类或基类的析构函数只作各自类对象消亡前的善后工作,15,10.3 派生类的构造函数和析构函数派生类构造函数的一般形式,派生类构造函数各部分的执行次序为:,1.调用基类构造函数,按它们在派生类定义的先后顺序,顺序调用。,2.调用内嵌对象构造函数,调用次序按各个对象在派生类内声明的顺序。,3.派生类的构造函数体中的操作。,*在派生类构造函数中,只要基类不是使用缺省构造函数都要显式给出基类名和参数表。如果基类没有定义构造函数,则派生类也可以不定义,全部采用系统给定的缺省构造函数。如果基类定义了带有形参表的构造函数时,派生类就应当定义构造函数。,16,派生类构造函数各部分的执行次序为:1.调用基类构造函数,按它,例10-3 派生类构造函数和析构函数的执行,#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 派生类构造函数和析构函数的执行#include,class Employee:public Person,char Dept20;PersonWang;,public:,Employee(char*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;,;,18,class Employee:public Person,int main(),Employee emp(张弓长,40,人事处,李木子,36);,return 0;,19,int main()19,派生类构造函数的执行次序,首先,调用基类构造函数,调用顺序按照它们被继承时声明的基类名顺序执行。,其次,调用内嵌对象构造函数,调用次序按各个对象在派生类内声明的顺序。,最后,执行派生类构造函数体中的内容。,20,派生类构造函数的执行次序首先,调用基类构造函数,调用顺序按照,析构函数,派生类析构函数执行过程恰与构造函数执行过程相反。,首先执行派生类析构函数,然后执行内嵌对象的析构函数,最后执行基类析构函数,21,析构函数 派生类析构函数执行过程恰与构造函数执行过程相反。2,自学内容,接口与实现方法的分离,显式访问基类成员,this指针,22,自学内容接口与实现方法的分离22,程序设计举例,例10-6 一个基类及其两个派生类,例10-7,多重继承,从多个基类派生出来的类,class Derived:public Base1,public Base2,double real;,public:,Derived(int,char,double);,double getReal()const;,void Output();,;,23,程序设计举例例10-6 一个基类及其两个派生类23,编程实例:棋子类,class ChineseStone :public Stone,char strType10;/棋子类型,intR;/棋子半径,public:,ChineseStone(int color,int col,int row,char*type);,/构造函数,void Show();/显示信息,;,24,编程实例:棋子类class ChineseStone :,补充习题,1.定义一个Point类,其成员有x,y;从Point派生Rectangle类,添加成员l,w;从Rectangle类派生Box类,添加成员h;编写主程序验证。,25,补充习题1.定义一个Point类,其成员有x,y;从Poin,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!