C程序设计课件ppt

上传人:des****85 文档编号:236130758 上传时间:2022-01-06 格式:PPT 页数:47 大小:255.01KB
返回 下载 相关 举报
C程序设计课件ppt_第1页
第1页 / 共47页
C程序设计课件ppt_第2页
第2页 / 共47页
C程序设计课件ppt_第3页
第3页 / 共47页
C程序设计课件ppt_第4页
第4页 / 共47页
C程序设计课件ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《C程序设计课件ppt》由会员分享,可在线阅读,更多相关《C程序设计课件ppt(47页珍藏版)》请在金锄头文库上搜索。

1、第2章 继承与派生n本章学习习重点掌握内容:n继继承的概念n派生类类的建立及继继承的方式n各种继继承方式下基类类成员员的访问访问 机制n派生类类的构造函数和析构函数n多重继继承n虚基类类Date1第2章 继承与派生n2.1 继继承与派生的基础础知识识 n2.2 类类的继继承方式 n2.3 派生类类的构造函数与析构函数 n2.4 基类类与派生类类的转换转换 n2.5 多重继继承 n2.6 虚基类类n2.7 综综合应应用实实例Date22.1 继承与派生的基础知识2.1.1 继继承与派生的基本概念 现实现实 世界中,许许多事物之间间的并不是孤立存在的,它们们存在共同的特性,有细细微的差别别,可以使

2、用层层次结结构描述它们们之间间的关系。例如交通工具的层层次结结构如图图2.1所示:Date32.1.1 继承与派生的基本概念 C+通过类过类 派生(Class Derivation)的机制支持继继承(Inheritance)。允许许程序员员在保持原有类类特性的基础础上进进行扩扩展,增加功能,派生出新类类。继继承是面向对对象程序设计设计 中的代码码复用的最重要的手段之一。被继继承的类类称为为基类类(Base Class)、父类类或超类类(Superclass),而新产产生的类类称为为派生类类(Derived Class)或子类类(Subclass)。基类类和派生类类的集合称作类继类继 承层层次结

3、结构(Hierarchy),继继承呈现现了面向对对象程序设计设计 的层层次结结构。Date42.1.1 继承与派生的基本概念 一个新类类从已有的类获类获 得其已有的特性称为继为继 承。通过继过继 承,新类获类获 得了父类类的所有数据成员员和成员员函数,并可以添加自己的数据成员员和成员员函数。一个基类类可以派生出很多的子类类,一个子类类也可以作为为另一个新类类的基类类,因此基类类和子类类是相对对而言的。继继承的方式有以下2种:单单一继继承和多重继继承。Date52.1.1 继承与派生的基本概念单单一继继承和多重继继承请注意图中箭头的方向,本书约定,箭头表示继承的方向,由子类指向基类。Date62

4、.1.2 派生类的定义定义义派生类类的一般格式为为:class 派生类类名:继继承方式 基类类名private:成员员表1; /派生类类增加或重写的私有成员员protected:成员员表2; /派生类类增加或重写的保护护成员员public:成员员表3; /派生类类增加或重写的公有成员员; Date72.1.2 派生类的定义其中:基类类名是已声明的类类,派生类类名是新生成的类类名;继继承方式规规定了如何访问访问 从基类继类继 承的成员员。继继承的方式包括:私有继继承(private)、保护继护继 承(protected)、 公有继继承(public)。不同的继继承方式下,派生类继类继 承的父类类

5、成员员的访问权访问权 限是不同的。继继承方式可以省略不写,默认认的继继承方式为为私有继继承(private);派生类类的定义义中包括子类类新增加的成员员和继继承父类类需要重写的成员员。新添加的成员员是派生类对类对 基类类的发发展,说说明派生类类新的属性和方法;派生类继类继 承了父类类的数据成员员和成员员函数,有时继时继 承来的成员员函数需要改进进,以满满足新类类的实际实际 需要。C+允许许在派生类类中重新声明和定义这义这 些成员员函数,使这这些函数具有新的功能,称之为为重写或覆盖。重写函数起屏蔽、更新作用,取代基类类成员员,完成新功能。Date82.1.2 派生类的定义【例2.1】已知盒子CB

6、ox类类,用继继承与非继继承两种不同的方法定义义彩色盒子CColorbox类类。分析:盒子类类(Cbox)具有长长、宽宽和高,成员员函数SetLength()、 SetWidth()和SetHeight()分别设别设 置盒子的长长、宽宽和高,成员员函数Volume()计计算盒子的体积积。彩色盒子除具有以上特性外,还还有一个数据成员员color表示盒子的颜颜色,相应应的成员员函数SetColor()用于设设置彩色盒子的颜颜色。Date92.1.2 派生类的定义非继继承的方式,分别别定义义CBox类类和CColorbox类类盒子类类的定义义:代码见备码见备 注彩色盒子类类的定义义:代码见备码见备

7、注Date102.1.2 派生类的定义使用派生类类定义义:class CColorbox : public CBox /公有继继承/新增的私有数据成员员public:void SetColor(int c) /新增的成员员函数 color=c;private:int color;利用继继承机制产产生类类比第一种简单简单 多了,但功能一样样。派生类类CColorbox公有继继承Cbox类类,它包括基类类CBox类类的全部数据成员员(length,width,height)和成员员函数(SetWidth 、SetHeigh和SetWidth),但访问权访问权 限发发生了变变化。并且添加自己的新成员

8、员数据成员员color和成员员函数SetColor()。Date112.1.3 派生类的生成仔细细分析派生新类这类这 个过过程,实际实际 是经历经历 了以下步骤骤:首先继继承基类类的成员员,不论论是数据成员员,还还是成员员函数,除构造函数与析构函数外全部接收,全部成为为派生类类的成员员。第二步是重写基类类成员员。当基类类成员员在派生类类的应应用中不合适时时,可以对继对继 承的成员员加以重写。如果派生类类声明了一个与基类类成员员函数相同的成员员函数时时,派生类类中的新成员则员则 屏蔽了基类类同名成员员,类类似函数中的局部变变量屏蔽全局变变量。称为为同名覆盖(Override)。第三步定义义新成员

9、员。新成员员必须须与基类类成员员不同名,是派生类类自己的新特性。派生类类新成员员的加入使得派生类类在功能上有所发发展。这这一步是继继承与派生的核心特征。第四步是重写构造函数与析构函数。因为为派生类类不继继承基类类的构造函数与析构函数,并且派生类类的需要对对新添加的数据成员进员进 行必要的初始化,所以构造函数与析构函数需要重写。Date122.2 类的继承方式 派生类类中包含基类类的成员员和派生类类自己增加的成员员,那么这这两部分的成员员关系和访问权访问权 限该该如何确定呢?在继继承机制中,并不是简单简单 的把基类类的私有成员员直接作为为派生类类的私有成员员,把基类类的公有成员员直接作为为派生类

10、类的公有成员员。派生类继类继 承的基类类成员访问权员访问权 限由继继承方式来控制。继继承方式有三种:public(公有)继继承、protected(保护护)继继承和private(私有)继继承。不同的继继承方式,决定了从基类继类继 承来的成员员的访问权访问权 限。下面分别别介绍绍不同继继承方式下,派生类类成员员的访问权访问权限。Date132.2.1 公有继承当定义义一个派生类时类时 ,将基类类前的继继承方式指定为为public,则则称为为公有派生(或公有继继承)。采用公有继继承方式时时,基类类的公有成员员和保护护成员员的访问权访问权 限在派生类类中不变变。而基类类的私有成员员在派生类类中是不

11、可访问访问 。但它仍然是基类类的私有成员员,如果需要在派生类类中引用继继承基类类的私有成员员,那么需要通过过基类类的公有或保护护的成员员函数访问访问 。【例2.3】演示公有继承方式下,不同成员的访问权限。程序代码见备注:Date142.2.1 公有继承【例2.4】公有派生方式下如何访问继承的基类原有私有数据成员。程序代码见备注:Date152.2.2 私有继承 当定义义一个派生类时类时 ,将基类类前的继继承方式指定为为private,则则称为为私有继继承。用私有继继承方式建立的派生类类称为为私有派生类类,其基类类成为为私有基类类。采用私有继继承方式时时,私有基类类的公有成员员和保护护成员员在私

12、有派生类类中成为为私有成员员。即派生类类成员员可访问访问 它们们,而派生类类外不可访问访问 它们们。基类类的私有成员员在派生类类中成为为不可访问访问 的成员员。私有继继承基类类成员员的访问权访问权限如表2-2所示。私有继继承的意义义是将基类类中原来能被外部访问访问的成员隐员隐 藏起来,不让让外界引用。【例2.5 】私有继承演示。 Date162.2.2 私有继承由上例可以看到私有继继承方式:(1)不能通过过派生类对类对 象(box1)引用从私有继继承过过来的任何成员员。如box1.set(3,5,6);或box1. length =100。(2)在派生类类内部(如派生类类的成员员函数),不可以

13、访问访问 基类类的私有成员员(如length=len,length为为基类类的私有成员员),但可以访问访问 基类类的公有和保护护成员员(如height=h,height为为基类类的保护护成员员)。(3)如果派生类类需要访问访问 基类类的私有成员员,可以通过过派生类类的成员员函数调调用基类类的公有成员员函数实现实现 如:void set_1(double len, double w , double h,int c) set(len,w,h); /基类类的公有成员员函数由上可以看出,私有派生的限制太多,一般不经经常使用。Date172.2.3 保护继承当定义义一个派生类时类时 ,将基类类前的继继

14、承方式指定为为protected,则则称为为保护继护继 承。在保护继护继 承中,基类类的公有成员员和保护护成员员成为为派生类类的保护护成员员,在派生类类中可以直接访问访问 ,但在派生类类外不能直接访问访问 任何基类类成员员的。基类类中的私有成员员成为为派生类类的不可访问访问 成员员,在派生类类中不可直接访问访问 。保护继护继 承基类类成员员的访问权访问权 限如表2-3所示。保护继护继 承的意义义是将基类类的公有成员员也保护护起来,不让类让类 外部任意访问访问 。Date18继继承的方式有三种,使用不同继继承方式,基类类的成员员在派生类类中的访问权访问权 限也不同。不同继继承方式下基类类成员员在

15、派生类类的访访问权问权 限总结总结 如表2-4所示。2.2.4 继承方式的总结和比较Date192.3 派生类的构造函数与析构函数 派生类类的成员员是由基类类中的数据成员员和派生类类中新增的数据成员员共同构成。而在继继承机制下,构造函数不能够够被继继承。因此,对继对继 承过过来的基类类成员员的初始化工作也得由派生类类的构造函数完成。也就是说说在定义义派生类类的构造函数时时,既要初始化派生类类新增数据,又要初始化基类类的成员员。所以,在定义义派生类类的构造函数时时,有两步需要做:编编写代码码完成自己的数据成员进员进 行初始化调调用基类类构造函数使基类类数据成员员得以初始化。Date202.3.1

16、 简单派生类的构造函数 单单一继继承的构造函数的定义义形式为为:派生类类名: 派生类类构造函数名(参数总总表) : 基类类构造函数名 (参数名表)派生类类新增成员员的初始化语语句; 定义义派生类类的构造函数时时,在构造函数的参数总总表中包括基类类构造函数所需的参数和派生类类新增的数据成员员初始化所需的参数。冒号后面基类类构造函数名 (参数名表),表示要调调用基类类的构造函数。【例2.6】 演示派生类类的构造函数执执行顺顺序。Date212.3.2 析构函数 析构函数的功能是做善后工作,析构函数无返回类类型也没有参数,情况比较简单较简单 。在派生过过程中,基类类的析构函数不能继继承,如果需要析构函数的话话,要在派生类类中重新定义义。派生类类析构函数定义义格式与非派生类类无任何差异,只要在函数体内把派生类类新增一般成员处员处 理好就可以了。而对对基类类成员员的善后工作,系统统会自己调调用基类类的析构函数来完成。如果没有显显示的定义义析构函数,系统统会自动动生成一个默认认的析构函数,清理工作就是靠它们们来完成的。 析构函数各部分执执行次序与构造函数相反,首先对对派生类类新增成员员析构,然后对

展开阅读全文
相关资源
相关搜索

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

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号