C语言程序设计继承性和派生类.pptx
《C语言程序设计继承性和派生类.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计继承性和派生类.pptx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 七 章章 继承性是面向对象程序设计中重要机制继承性是面向对象程序设计中重要机制之一之一。这种机制改变了过去传统的非面向对象程序设计中那种对不再适合要求的用户定义数据类型进行改写甚至重写的方法,克服了传统程序设计方法对编写出来的程克服了传统程序设计方法对编写出来的程序序无法重复使用而造成资源的浪费的缺点。无法重复使用而造成资源的浪费的缺点。面向对象程序设计的继承机制给我们提供了无限重复利用程序继承机制给我们提供了无限重复利用程序资资源的一种途径。源的一种途径。通过C+语言中的继承机制,可以扩充和完善旧的程序设计以适应新的需求,这样不仅可以节省程序开发的时间和资源,并且为未来程序设计增添了新
2、的资源。第1页/共43页第一节 基类和派生类第2页/共43页第第 七 章章一、基类和派生类的基本概念:定义一个新类使其包含原来类的所有成员,同定义一个新类使其包含原来类的所有成员,同时还有自己的新成员,称这个新类是原来类的派生时还有自己的新成员,称这个新类是原来类的派生类(子类),原来类称基类(父类)。类(子类),原来类称基类(父类)。二、单继承和多继承:单继承:单继承:只有一个基类的继承。只有一个基类的继承。多继承多继承:具有两个或两个以上的基类的继承。具有两个或两个以上的基类的继承。如图:ABXYZ第3页/共43页第第 七 章章三、派生类的三种继承方式:1 1、公有继承方式(public)
3、(public):特点是基类的公有成员和保护成员基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态都保持原有的状态,而基类的私有成员私有成员仍仍然是私有的。然是私有的。2 2、私有继承方式(private):(private):特点是基类的公有成员和保护成员都作为派生基类的公有成员和保护成员都作为派生类类的私有成员的私有成员,并且不能被这个派生类的子类所访问并且不能被这个派生类的子类所访问,而且基类的私有成员私有成员也也仍然是私有的。仍然是私有的。3 3、保护继承方式(protected)(protected):特点是基类的所有公有成员和保护成员都成为基类的所有公有成员和保护成员
4、都成为派派生类的保护成员生类的保护成员,并且只能被它的派生类成员函数或只能被它的派生类成员函数或友友第4页/共43页第第 七 章章元访问元访问,基类的私有成员仍然是私有的。私有成员仍然是私有的。四、派生类的定义格式:1 1、单继承的定义格式:class class:;2 2、多继承的定义格式:classclass:,2 ;第5页/共43页第第 七 章章五、基类与派生类的关系:1 1、派生类是基类的具体化:基类是对若干个派生类的抽象,而派生类是基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加行为将抽象类变为某种有用的类型。输入设备键盘鼠标器数字化仪第6页/共43页第第 七 章章2
5、2、派生类是基类定义的延续:先定义一个抽象基类,该基类中有些操作并未实现。然后定义非抽象的派生类,实现抽象基类中定义的操作。这时,派生类是抽象的基类的实现,即可看成是基类定义的延续。这也是派生类的一种常用的方法。3 3、派生类是基类的组合:在多继承时,一个派生类有多于一个的基类,这时派生类将是所有基类行为组合。注意注意:基类和派生类是相对而言的基类和派生类是相对而言的。一个基类可以是另一个基类的派生类,这样便形成了复杂的继承第7页/共43页第第 七 章章结构,出现了类的层次。一个基类派生出一个派生一个基类派生出一个派生类类,该派生类该派生类做另一个派生类的基类做另一个派生类的基类,则该派生类称
6、为,则该派生类称为原原来基类的直接派生类,而来基类的直接派生类,而原来基类为原来基类为另一个另一个派生类派生类的的间接基类间接基类。第8页/共43页第二节 基类成员在派生类中 的访问权限第9页/共43页第第 七 章章 基类成员由于继承方式的不同在派生类中的访问权限不同,三种不同的继承方式的基类特性与派生类特性如表:继承方式 基类特性 派生类特性 公有继承 publicprotectedprivate publicprotected不可访问 私有继承 publicprotected private privateprivate不可访问 保护继承 publicprotected private p
7、rotectedprotected不可访问 第10页/共43页第第 七 章章1、派生类对基类成员的可访问性:(1)、在公有继承方式下,基类中成员在派生类中不变。(2)、在私有继承方式下,基类中成员在派生类中为私 有。(3)、在保护继承方式下,基类中成员在派生类中为保 护。注意注意:无论哪种继承方式派生类都不能访问基无论哪种继承方式派生类都不能访问基类类中私有成员。中私有成员。2、派生类对象对基类成员的可访问性:只有公有继承方式下的基类公有成员才可访问只有公有继承方式下的基类公有成员才可访问。3、派生类的派生类对基类成员的可访问性:第11页/共43页第第 七 章章 在公有继承和保护继承方式下,基
8、类中的公有在公有继承和保护继承方式下,基类中的公有成成员和保护成员都可访问。员和保护成员都可访问。例例1 1、分析程序中的访问权限,并回答所提的问题。#include class A public:void f1();protected:int j1;private:int i1;第12页/共43页第第 七 章章class B:public A /B/B类对类对A A类的继承是公有继类的继承是公有继承承 public:void f2();protected:int j2;private:int i2;class C:public B /C/C类对类对B B类的继承是公有继承类的继承是公有继承
9、public:void f3();第13页/共43页第第 七 章章回答下列问题:1、派生类B中成员函数f2()能否访问基类A中的成员:f1(),i1和j1吗?答:可以访问f1()和j1,而不可以访问i1。2、派生类 B 的对象b1能否访问基类A中的成员:f1(),i1和j1吗?答:可以访问f1(),而不可以访问i1和j1。3、派生类C中成员函数f3()能否访问直接基类B中的 成员:f2(),j2和 i2吗?能否访问间接基类A中的成员f1(),j1和i1吗?答:可以访问直接基类中的f2()和j2以及间接基类 中的f1()和j1,而不可以访问 i2和i1。第14页/共43页第第 七 章章4、派生类
10、C的对象c1能否访问直接基类B中的成员:f2(),i2和j2吗?能否访问间接基类A中的成员:f1(),j1和i1吗?答:可以访问直接基类中的f2()和间接基类中的f1(),其他的都不可访问。5、从对(1)(4)问题的回答可得出对公有继承的什么结论?答:在公有继承时,派生类的成员函数可访问基类中的 公有成员和保护成员;派生类的对象仅可访问基类中 的公有成员。问题问题:如果将程序中的继承方式改为私有继承,问题将如何回答?第15页/共43页第第 七 章章例例2 2、分析下列程序,并回答所提的问题。#include class A public:void f(int i)coutiendl;void
11、g()coutgn;class B:A /缺省的继承方式缺省的继承方式表示为表示为privateprivate public:void h()couthn;A:f;/将基类中的公有成员说明为派生类的公有将基类中的公有成员说明为派生类的公有成员成员;第16页/共43页第第 七 章章void main()B d1;d1.f(6);d1.g();d1.h();回答下列问题:1、执行该程序时,哪个语句会出现编译错?为什么?答:程序中 d1.g();d1.g();语句出现编译错。因为B是以私有 继承方式继承类A的,类A的所有成员对B类的对象都 是不可见的,所以B类的对象不可访问A类的成员函 数。第17页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 继承性和派生类 语言程序设计 继承 派生
限制150内