面向对象程序设计教程(C++语言描述)下ppt.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向对象程序设计教程(C++语言描述)下ppt.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 教程 C+ 语言 描述 ppt
- 资源描述:
-
1、第第4章章 继承机制继承机制面向对象程序设计教程(面向对象程序设计教程(C+语言描述)下语言描述)下第第4章章 继承机制继承机制第第4章章 继承机制继承机制4.1 基类和派生类基类和派生类4.2 单继承单继承4.3 派生类的访问控制派生类的访问控制4.4 多继承多继承4.5 继承机制下的构造函数与析构函数继承机制下的构造函数与析构函数4.6 应用实例应用实例第第4章章 继承机制继承机制4.1 基类和派生类基类和派生类返回首页返回首页4.1.1 继承和派生的基本概念继承和派生的基本概念4.1.2 继承的种类继承的种类第第4章章 继承机制继承机制4.1.1 继承和派生的基本概念继承和派生的基本概念
2、 通过继承机制,可以利用已有的数据类型通过继承机制,可以利用已有的数据类型来定义新的数据类型来定义新的数据类型。根据一个类创建一个新类的过程称为继承,根据一个类创建一个新类的过程称为继承,也称派生。新类自动具有原有类的成员,根据也称派生。新类自动具有原有类的成员,根据需要还可以增加新成员需要还可以增加新成员。派生新类的类称为基类,又称父类,而将派生新类的类称为基类,又称父类,而将派生出来的新类称为派生类,又称子类派生出来的新类称为派生类,又称子类。第第4章章 继承机制继承机制4.1.1 继承和派生的基本概念继承和派生的基本概念 从现存类中派生出新类时,可以对派生类从现存类中派生出新类时,可以对
3、派生类做如下几种变化:做如下几种变化:增加新的成员变量增加新的成员变量增加新的成员函数增加新的成员函数重新定义已有的成员函数重新定义已有的成员函数改变现有成员的属性改变现有成员的属性返回本节返回本节第第4章章 继承机制继承机制4.1.2 继承的种类继承的种类 一个派生类既可以从一个基类派生,也可一个派生类既可以从一个基类派生,也可以从多个基类派生。以从多个基类派生。从一个基类派生的继承被称为单继承。单从一个基类派生的继承被称为单继承。单继承形成的类层次是一个倒挂的树。继承形成的类层次是一个倒挂的树。从多个基类派生类的继承被称为多继承。从多个基类派生类的继承被称为多继承。多继承形成的类层次是一个
4、有向无环图。多继承形成的类层次是一个有向无环图。返回本节返回本节第第4章章 继承机制继承机制4.2 单继承单继承 C+有两种继承:单继承和多继承,无论有两种继承:单继承和多继承,无论哪种继承,都有公有继承、私有继承和保护继哪种继承,都有公有继承、私有继承和保护继承承3种继承方式。不同继承方式,派生类对基类种继承方式。不同继承方式,派生类对基类成员拥有不同的访问权限。成员拥有不同的访问权限。在在C+中,单一继承的一般形式为:中,单一继承的一般形式为:第第4章章 继承机制继承机制4.2 单继承单继承class派生类名:继承方式基类名派生类名:继承方式基类名 public:protected:pri
5、vate:;第第4章章 继承机制继承机制4.2 单继承单继承继承方式继承方式有有三种三种:public 表示公有继承方式表示公有继承方式private 表示私有继承方式表示私有继承方式protected 表示保护继承方式表示保护继承方式缺省情况下为私有继承方式。缺省情况下为私有继承方式。第第4章章 继承机制继承机制4.2 单继承单继承【例【例4.1】公有继承方式单继承的例子。阅读程】公有继承方式单继承的例子。阅读程序,了解继承和派生类的基本概念,熟悉单继序,了解继承和派生类的基本概念,熟悉单继承的定义格式。承的定义格式。返回首页返回首页第第4章章 继承机制继承机制4.3 派生类的访问控制派生类
6、的访问控制返回首页返回首页4.3.1 公有继承公有继承4.3.2 私有继承私有继承4.3.3 保护继承保护继承第第4章章 继承机制继承机制4.3.1 公有继承公有继承 类的派生可以分成公有继承、私有继承和类的派生可以分成公有继承、私有继承和保护继承保护继承3 3种。基类成员在派生类中的访问权种。基类成员在派生类中的访问权限与继承方式及基类成员本身被声明的访问权限与继承方式及基类成员本身被声明的访问权限有关。限有关。继承中有一种新的访问权限:不可访问。继承中有一种新的访问权限:不可访问。第第4章章 继承机制继承机制4.3.1 公有继承公有继承 公有继承时,在派生类中,基类的公有成公有继承时,在派
7、生类中,基类的公有成员和保护成员被继承后分别作为派生类的公有员和保护成员被继承后分别作为派生类的公有成员和保护成员。成员和保护成员。公有派生时,可以通过定义派生类自己的公有派生时,可以通过定义派生类自己的成员函数来访问派生类继承来的公有和保护成成员函数来访问派生类继承来的公有和保护成员,但不能访问继承来的私有成员。员,但不能访问继承来的私有成员。第第4章章 继承机制继承机制4.3.1 公有继承公有继承赋值兼容规则:是指在公有继承情况下,一赋值兼容规则:是指在公有继承情况下,一个派生类的对象可以作为基类的对象来使用个派生类的对象可以作为基类的对象来使用的地方。的地方。三种情况:三种情况:派生类的
8、对象可以赋给基类的对象派生类的对象可以赋给基类的对象例如:例如:DerivedClass d;BaseClass b;b=d;第第4章章 继承机制继承机制4.3.1 公有继承公有继承派生类的对象可以初始化基类的引用派生类的对象可以初始化基类的引用例如:例如:DerivedClass d;BaseClass&br=d;派生类的对象的地址可以赋给指向基类的派生类的对象的地址可以赋给指向基类的指针指针例如:例如:DerivedClass d;BaseClass*pb=&d;返回本节返回本节第第4章章 继承机制继承机制4.3.2 私私有继承有继承 私有继承时,在派生类中,基类的公私有继承时,在派生类中
9、,基类的公有成员和保护成员作为派生类的私有成员,有成员和保护成员作为派生类的私有成员,派生类的成员函数可以直接访问它们,而派派生类的成员函数可以直接访问它们,而派生类的成员函数无法直接访问基类的私有成生类的成员函数无法直接访问基类的私有成员。在类外部,派生类的对象无法访问基类员。在类外部,派生类的对象无法访问基类的所有成员。的所有成员。第第4章章 继承机制继承机制4.3.2 私私有继承有继承把例把例4.1修改为修改为Point类私有继承类私有继承Circle类:类:按下面修改代码,其它部分不变。按下面修改代码,其它部分不变。第第4章章 继承机制继承机制4.3.2 私私有继承有继承/定义派生类,
10、私有继承方式定义派生类,私有继承方式class Circle:private Point public:void setr(int myx,int myy,int myr)setxy(myx,myy);R=myr;void display();protected:int R;第第4章章 继承机制继承机制4.3.2 私私有继承有继承编译程序,发现主函数中语句编译程序,发现主函数中语句c.movexy(7,8);出错。私有继承使出错。私有继承使Point类中的公有成员函类中的公有成员函数数movexy()的性质发生了变化。的性质发生了变化。在派生类在派生类Circle中增加新的外部接口,中增加新的
11、外部接口,代码如下:代码如下:返回本节返回本节第第4章章 继承机制继承机制4.3.3 保护保护继承继承【例【例4.2】演示保护继承】演示保护继承第第4章章 继承机制继承机制4.3.3 保护保护继承继承返回本节返回本节继承方式继承方式基类成员基类成员在子类中在子类中访问权限访问权限子类内部子类内部模块访问性模块访问性子类对象子类对象访问性访问性公有继承公有继承公有成员公有成员保护成员保护成员私有成员私有成员公有的公有的保护的保护的不可访问不可访问可以访问可以访问可以访问可以访问不可访问不可访问可以访问可以访问不可访问不可访问不可访问不可访问私有继承私有继承公有成员公有成员保护成员保护成员私有成员
12、私有成员私有成员私有成员私有成员私有成员不可访问不可访问可以访问可以访问可以访问可以访问不可访问不可访问不可访问不可访问不可访问不可访问不可访问不可访问保护继承保护继承公有成员公有成员保护成员保护成员私有成员私有成员保护的保护的保护的保护的不可访问不可访问可以访问可以访问可以访问可以访问不可访问不可访问不可访问不可访问不可访问不可访问不可访问不可访问第第4章章 继承机制继承机制4.4 多继承多继承返回首页返回首页4.4.1 多继承的定义格式多继承的定义格式4.4.2 二义性和支配规则二义性和支配规则4.4.3 虚基类虚基类第第4章章 继承机制继承机制4.4.1 多继承的定义格式多继承的定义格式
13、一个类从多个基类派生的一般形式是:一个类从多个基类派生的一般形式是:classclass派生类名:继承方式基类名派生类名:继承方式基类名1 1,继承方式基类名,继承方式基类名n n 定义派生类自己的成员定义派生类自己的成员;第第4章章 继承机制继承机制4.4.1 多继承的定义格式多继承的定义格式【例【例4.34.3】阅读程序,了解多继承的定义格】阅读程序,了解多继承的定义格式,进一步熟悉基类成员在派生类中的访问式,进一步熟悉基类成员在派生类中的访问权限。权限。返回本节返回本节第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则 多继承时,可能会造成派生类对基类成员多继承时,
14、可能会造成派生类对基类成员访问的不唯一性,即二义性。访问的不唯一性,即二义性。1.调用不同基类的相同成员时可能出现二义性调用不同基类的相同成员时可能出现二义性【例【例4.44.4】下面程序调用了不同基类的相同成员,】下面程序调用了不同基类的相同成员,分析程序中出现的二义性。分析程序中出现的二义性。第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则 主函数主函数main()的语句的语句obj.show()中,中,对象对象obj调用哪个调用哪个show()函数存在二义性。函数存在二义性。若要消除二义性若要消除二义性:使用作用域运算符使用作用域运算符例如:例如:obj.Base
15、class1:show();obj.Baseclass2:show();第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则通过在派生类通过在派生类Derivedclass中定义一个新函中定义一个新函数数show()例例如:如:void Derivedclass:show()Baseclass1:show();Baseclass2:show();第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则 类类X中的名字中的名字N支配类支配类Y中同名的名字中同名的名字N,是指类是指类X以类以类Y为它的一个基类,这被称为支为它的一个基类,这被称为支配规则。配规则。
16、Baseclass1a,seta(),show()Baseclass2 b,setb(),show()Derivedclassc,show()第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则2.访问共同基类的成员时可能出现二义性访问共同基类的成员时可能出现二义性 如果一个派生类从多个基类派生,而这如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在这个派生类些基类又有一个共同的基类,则在这个派生类中访问这个共同的基类中的成员时可能会产生中访问这个共同的基类中的成员时可能会产生二义性。二义性。【例【例4.5】下面程序访问了共同基类的成员,】下面程序访问了共同基
17、类的成员,分析程序中出现的二义性。分析程序中出现的二义性。第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则BasevalBasevalBaseclass1seta()Baseclass2setb()Derivedclassshow()第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则 从图可以看出,从图可以看出,Derivedclass的对象包含基的对象包含基类类Base的两个基类子对象:一个是由的两个基类子对象:一个是由Baseclass1路径产生的,另一个是由路径产生的,另一个是由Baseclass2路径产生的。路径产生的。【例【例4.6】示例
18、】示例Derivedclass的对象包含基类的对象包含基类Base的两个基类子对象的两个基类子对象第第4章章 继承机制继承机制4.4.2 二义性和支配规则二义性和支配规则 由于二义性原因,一个类不能从同一个由于二义性原因,一个类不能从同一个类中直接继承一次以上。如果必须这样做,类中直接继承一次以上。如果必须这样做,可以使用一个中间类。可以使用一个中间类。二义性检查是在访问权限检查之前进行二义性检查是在访问权限检查之前进行的,因此,成员的访问权限是不能解决两义的,因此,成员的访问权限是不能解决两义性问题的。性问题的。返回本节返回本节第第4章章 继承机制继承机制4.4.3 虚基类虚基类 引进虚基类
19、的目的是为了解决二义性问题,引进虚基类的目的是为了解决二义性问题,使得公共基类在它的派生类对象中只产生一个使得公共基类在它的派生类对象中只产生一个基类子对象。基类子对象。虚基类说明格式如下:虚基类说明格式如下:virtual 其中,其中,virtual是说明虚基类的关键字。虚基是说明虚基类的关键字。虚基类的说明是用在定义派生类时,写在派生类名类的说明是用在定义派生类时,写在派生类名的后面。的后面。例如:例如:第第4章章 继承机制继承机制4.4.3 虚基类虚基类class Baseclass1:visual public Base public:void seta(int x)val=x;cla
20、ss Baseclass2:visual public Base public:void setb(int x)val=x;第第4章章 继承机制继承机制4.4.3 虚基类虚基类BasevalBaseclass1seta()Baseclass2setb()Derivedclassshow()返回本节返回本节第第4章章 继承机制继承机制4.5 继承机制下的构造函数与析构函数继承机制下的构造函数与析构函数返回首页返回首页4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调用顺序4.5.2 派生类构造函数的规则派生类构造函数的规则4.5.3 继承机制下析构函数的调用顺序继承机制下析构函数的调
21、用顺序第第4章章 继承机制继承机制4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调用顺序派生类名:派生类名(总参数派生类名:派生类名(总参数表):基类名表):基类名1(参数表(参数表1),),基类名基类名n(参数表(参数表n)派生类中数据成员初始化派生类中数据成员初始化;第第4章章 继承机制继承机制4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调用顺序1.单继承机制下构造函数的调用顺序单继承机制下构造函数的调用顺序 当说明派生类的一个对象时,首先调用基当说明派生类的一个对象时,首先调用基类的构造函数,对基类成员进行初始化,然后类的构造函数,对基类成员进行初始化,然后
22、执行派生类的构造函数,如果某个基类仍是一执行派生类的构造函数,如果某个基类仍是一个派生类,则这个过程递归进行。个派生类,则这个过程递归进行。【例【例4.74.7】分析程序的输出结果,理解继承中】分析程序的输出结果,理解继承中构造函数的调用顺序。构造函数的调用顺序。第第4章章 继承机制继承机制4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调用顺序【例【例4.8】分析程序的输出结果,理解派生类包】分析程序的输出结果,理解派生类包括子对象时,其构造函数的调用顺序。括子对象时,其构造函数的调用顺序。第第4章章 继承机制继承机制4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调
23、用顺序2多继承机制下构造函数的调用顺序多继承机制下构造函数的调用顺序 多继承方式下派生类的构造函数须同时负多继承方式下派生类的构造函数须同时负责该派生类所有基类构造函数的调用责该派生类所有基类构造函数的调用。构造函数调用顺序是:先调用所有基类的构造函数调用顺序是:先调用所有基类的构造函数,再调用派生类的构造函数构造函数,再调用派生类的构造函数。处于同一层次的各基类构造函数的调用顺处于同一层次的各基类构造函数的调用顺序取决于定义派生类所指定的基类顺序,与派序取决于定义派生类所指定的基类顺序,与派生类构造函数中所定义的成员初始化列表顺序生类构造函数中所定义的成员初始化列表顺序无关无关。第第4章章
24、继承机制继承机制4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调用顺序【例【例4.9】分析程序的输出结果,理解多继承方】分析程序的输出结果,理解多继承方式下构造函数的调用顺序。式下构造函数的调用顺序。第第4章章 继承机制继承机制4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调用顺序【例【例4.10】分析程序的输出结果,理解有虚基类】分析程序的输出结果,理解有虚基类时,多继承方式下构造函数的调用顺序。时,多继承方式下构造函数的调用顺序。第第4章章 继承机制继承机制4.5.1 继承机制下构造函数的调用顺序继承机制下构造函数的调用顺序返回本节返回本节第第4章章 继承机制继
25、承机制4.5.2 派生类构造函数的调用规则派生类构造函数的调用规则分四种情况讨论派生类构造函数的规则:分四种情况讨论派生类构造函数的规则:u 若派生类有构造函数而基类没有,当创建若派生类有构造函数而基类没有,当创建派生类的对象时,派生类的相应构造函数被自派生类的对象时,派生类的相应构造函数被自动调用。动调用。u若派生类没有构造函数而基类有,则基类必若派生类没有构造函数而基类有,则基类必须拥有缺省构造函数。只有这样,当创建派生须拥有缺省构造函数。只有这样,当创建派生类的对象时,才能自动执行基类的默认构造函类的对象时,才能自动执行基类的默认构造函数。数。第第4章章 继承机制继承机制4.5.2 派生
展开阅读全文