C-程序设计教程第二版课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C-程序设计教程第二版课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 教程 第二 课件
- 资源描述:
-
1、7:22:561C+C+程序设计教程程序设计教程(第二版第二版)第十章第十章 继承继承 Chapter 10 Inheritance 清华大学出版社清华大学出版社 钱钱 能能7:22:572第十章第十章 继继 承承 1.继承结构(Inheritance Structure)2.访问父类成员(Access Fathers Member)3.派生类的构造(Constructing Derived Classes)4.继承方式(Inheritance Mode)5.继承与组合(Inheritance&Composition)6.多继承概念(Multi-Inheritance Concept)7.多继
2、承技术(Multi-Inheritance Technology)7:22:5731.继承结构(Inheritance Structure)类层次结构宇宙万事万物都是宇宙万事万物都是分类分层分类分层的,解决问题可以的,解决问题可以从事物之间的上下关系中着手这是继承引入从事物之间的上下关系中着手这是继承引入程序设计的前提程序设计的前提例如:各类型的交通工具之间具有继承关系。例如:各类型的交通工具之间具有继承关系。7:22:574交通工具交通工具汽车汽车小汽车小汽车大卡车大卡车大客车大客车工具车工具车轿车轿车面包车面包车图图10-1 继承的类层次继承的类层次7:22:575n基类(父类):基类(父
3、类):派生新类的类派生新类的类n派生类(子类):派生类(子类):从基类派生而成的类从基类派生而成的类n基类和派生类:基类和派生类:构成类的构成类的层次层次关系关系n单继承:单继承:从一个基类派生而成的类从一个基类派生而成的类n多继承:多继承:从多个基类派生而成的类从多个基类派生而成的类n继承方式:继承方式:公有继承、私有继承、保护继承公有继承、私有继承、保护继承7:22:576派生类的定义派生类的定义n语法:语法:classclass 派生类名派生类名:访问控制访问控制 基类名基类名 ;n访问控制:访问控制:publicpublic、protected protected、privatepri
4、vaten缺省为:缺省为:privateprivate继承方式继承方式公有继承公有继承 派生时用派生时用“public”public”作访问控制作访问控制私有继承私有继承 派生时用派生时用“private”private”作访问控制作访问控制保护继承保护继承 派生时用派生时用“protected”protected”作访问控作访问控制制7:22:587n继承方式继承方式n继承方式与访问控制:继承方式与访问控制:访问控制符访问控制符 继承方式继承方式 public public 公有继承公有继承 private private 私有继承私有继承 protected protected 保护继承保
5、护继承n注意:注意:如果类之间如果类之间没有继承关系没有继承关系则保护成员和则保护成员和私有成员类似私有成员类似;但在类的继承关系中,保护成但在类的继承关系中,保护成员在其子类中可以被直接访问,而私有成员在员在其子类中可以被直接访问,而私有成员在它的子类中也不能被直接访问。它的子类中也不能被直接访问。7:22:588n公有继承:公有继承:基类的公有段成员被继承为公有的,基类的公有段成员被继承为公有的,基类的保护段成员被继承为保护的。派生时用基类的保护段成员被继承为保护的。派生时用“publicpublic”作访问控制。作访问控制。n保护继承:保护继承:基类的基类的公有段成员公有段成员和和保护段
6、成员保护段成员被被继承为保护的,派生时用继承为保护的,派生时用“protectedprotected”作访作访问控制。问控制。n私有继承:私有继承:基类的基类的公有段成员公有段成员和和保护段成员保护段成员被被继承为私有的,派生时用继承为私有的,派生时用“privateprivate”作访问作访问控制。控制。n基类的私有成员在任何情况下都是基类的私有成员在任何情况下都是基类所私有基类所私有的的,在基类以外都不能访问!,在基类以外都不能访问!7:22:589n公有成员:公有成员:一个类的公有成员允许本类的成员一个类的公有成员允许本类的成员函数、本类的对象、派生类的成员函数、函数、本类的对象、派生类
7、的成员函数、公有公有派生类的对象直接访问,不允许保护和私有派派生类的对象直接访问,不允许保护和私有派生类的对象直接访问。生类的对象直接访问。n私有成员:私有成员:一个类的私有成员一个类的私有成员只只允许允许本类本类的成的成员函数直接访问。员函数直接访问。n保护成员:保护成员:允许本类的成员函数、派生类的成允许本类的成员函数、派生类的成员函数直接访问,员函数直接访问,不允许对象不允许对象直接访问。直接访问。7:22:5810 基类访问控制符基类访问控制符继承方式继承方式publicpublicprotectedprotectedprivateprivatepublicpublicpublicpu
8、blicprotectedprotected隔离隔离protectedprotectedprotectedprotectedprotectedprotected隔离隔离privateprivateprivateprivateprivateprivate隔离隔离7:22:5811n例如:一个含有不同继承方式的类的继承结例如:一个含有不同继承方式的类的继承结构。构。nclass Baseclass Basen int int b1;b1;nprotected:protected:n int int b2;b2;n void fb2()b1=1;void fb2()b1=1;npublic:publ
9、ic:n int int b3;b3;n void fb3()b1=1;void fb3()b1=1;n;7:22:5812nclass Priclass Pri:private Baseprivate Base npublic:public:n void test()void test()n b1=1;/error b1=1;/errorn b2=1;/ok b2=1;/okn b3=1;/ok b3=1;/okn fb2();/ok fb2();/okn fb3();/ok fb3();/okn n;class FromPriclass FromPri :public Pri:public
10、 Pri public:public:void test()void test()b1=1;/error b1=1;/error b2=1;/error b2=1;/error b3=1;/error b3=1;/error fb2();/error fb2();/error fb3();/error fb3();/error ;7:22:5813class Pro:class Pro:protected Baseprotected Base public:public:void test()void test()b1=1;/error b1=1;/error b2=1;/ok b2=1;/o
11、k b3=1;/ok b3=1;/ok fb2();/ok fb2();/ok fb3();/ok fb3();/ok ;class FromProclass FromPro:public Propublic Pro public:public:void test()void test()b1=1;/error b1=1;/error b2=1;/ok b2=1;/ok b3=1;/ok b3=1;/ok fb2();/ok fb2();/ok fb3();/ok fb3();/ok ;7:22:5814nclass Pub:class Pub:public Basepublic Base n
12、public:public:n void test()void test()n b1=1;/error b1=1;/errorn b2=1;/ok b2=1;/okn b3=1;/ok b3=1;/okn fb2();/ok fb2();/okn fb3();/ok fb3();/okn n;class FromPubclass FromPub:public Pubpublic Pub public:public:void test()void test()b1=1;/error b1=1;/error b2=1;/ok b2=1;/ok b3=1;/ok b3=1;/ok fb2();/ok
13、 fb2();/ok fb3();/ok fb3();/ok ;7:22:5815nintint main()main()n Pri priObj Pri priObj;n priObj.b1=1;/error priObj.b1=1;/errorn priObj.b2=1;/error priObj.b2=1;/errorn priObj.b3=1;/error priObj.b3=1;/errorn Pro proObj Pro proObj;n proObj.b1=1;/error proObj.b1=1;/errorn proObj.b2=1;/error proObj.b2=1;/e
14、rrorn proObj.b3=1;/error proObj.b3=1;/errorn Pub pubObj Pub pubObj;n pubObj.b1=1;/error pubObj.b1=1;/errorn pubObj.b2=1;/error pubObj.b2=1;/errorn pubObj.b3=1;/ok pubObj.b3=1;/okn 7:22:5816n说明:说明:n私有私有继承时,基类中不管是公有的,还是保护继承时,基类中不管是公有的,还是保护的,一律在子类中变成私有成员。的,一律在子类中变成私有成员。保护保护继承时,继承时,基类中公共和保护的成员在子类中变成保护的。
15、基类中公共和保护的成员在子类中变成保护的。公共公共继承时,基类中为公共、保护的成员在子继承时,基类中为公共、保护的成员在子类中仍保持为公共、保护的。类中仍保持为公共、保护的。n在继承关系中,基类的在继承关系中,基类的privateprivate成员不但对应成员不但对应用程序隐藏,对派生类也隐藏。而基类的用程序隐藏,对派生类也隐藏。而基类的保护保护成员成员则只对应用程序隐藏,而对派生类则毫不则只对应用程序隐藏,而对派生类则毫不隐瞒。隐瞒。7:22:5817n在派生类中,可以调整成员的访问控制属性在派生类中,可以调整成员的访问控制属性!nclass Baseclass Basen int int
16、b1;b1;nprotected:protected:n int int b2;b2;n void fb2()b1=1;void fb2()b1=1;npublic:public:n int int b3;b3;n void fb3()b1=1;void fb3()b1=1;n;nclass Priclass Pri:private Baseprivate Base npublic:public:n using Base:fb3;using Base:fb3;/fb3从私有转为公有从私有转为公有n using Base:b1;using Base:b1;/error/error!b1b1不可见
17、不可见 ;nintint main()main()n Pri pri Pri pri;n pri.fb3();/ok pri.fb3();/okn 7:22:5818n说明:说明:n在派生类中调整访问控制属性的前提是在派生类中调整访问控制属性的前提是在派生在派生类中该成员必须是可见的类中该成员必须是可见的n注意:注意:n在写程序时,数据成员一般设置为在写程序时,数据成员一般设置为私有私有的;的;7:22:5819n 派生类对象结构派生类对象结构 对于下面的继承关系:对于下面的继承关系:class Fatherclass Father int a,b int a,b;public:public:
18、/成员函数成员函数;class Sonclass Son :public Father:public Father int int c;c;public:public:/成员函数成员函数;基类对象基类对象子类对象子类对象n说明:说明:派生类中含有基类的数据成员,子类对派生类中含有基类的数据成员,子类对象空间总是象空间总是不小于不小于基类对象基类对象cabab基类部分基类部分子类添加部分子类添加部分7:22:58202.访问父类成员(Access Fathers Member)n继承父类成员继承父类成员n例如:有一个学生类例如:有一个学生类Student,现在要增加现在要增加研究生类,研究生类除
19、了自己所特有的性质研究生类,研究生类除了自己所特有的性质外,还具有学生类的所有性质,下面用继承外,还具有学生类的所有性质,下面用继承的方法来的方法来重用重用学生类的代码。学生类的代码。7:22:5821nclass Advisor class Advisor /导师类导师类n int noOfMeetingint noOfMeeting;n;nclass Student class Student /学生类学生类n string name;string name;n int semesterHours int semesterHours;/学时学时n double average;double
20、 average;/平均分平均分npublic:public:n StudentStudent(string(string pNamepName=noName):name(pName),average(0),=noName):name(pName),average(0),semesterHours(0)semesterHours(0)7:22:5822nvoid addCourse(intvoid addCourse(int hours,double grade)hours,double grade)n double totalGrade=(semesterHours double total
21、Grade=(semesterHours *average+average+grade);grade);/总分总分n semesterHourssemesterHours+=hours;+=hours;/总修学时总修学时n average=semesterHoursaverage=semesterHours?totalGrade/semesterHours totalGrade/semesterHours:0;:0;/平均分平均分 nvoid display()void display()n cout coutname=name,hours=“name=name,hours=“semester
22、Hours semesterHours,average=averagen;,average=averagen;n nint getHours()return semesterHoursint getHours()return semesterHours;ndouble getAveragedouble getAverage()return average;()return average;n;7:22:5823nclass GraduateStudentclass GraduateStudent :public Student:public Student n/研究生类研究生类(继承学生类继承
23、学生类)n Advisor advisor Advisor advisor;/导师导师n int qualifierGradeint qualifierGrade;/资格考试分数资格考试分数npublic:public:n int getQualifier()return qualifierGrade int getQualifier()return qualifierGrade;n;nintint main()main()n Student ds(Lo lee undergrade Student ds(Lo lee undergrade););n GraduateStudent gs Gr
24、aduateStudent gs;n ds.addCourse ds.addCourse(3,2.5);(3,2.5);n ds.display ds.display();();n gs.addCourse(3,3.0);gs.addCourse(3,3.0);n gs.displaygs.display();();n 运行结果:运行结果:name=Lo lee Undergrad,hoursname=Lo lee Undergrad,hours=3,average=0.833333=3,average=0.833333 name=no name,hours name=no name,hour
25、s=3,average=1=3,average=17:22:5824void fn(Studentvoid fn(Student&s)/&s)/void main()void main()GraduateStudent gs GraduateStudent gs;fn(gs fn(gs););函数函数fn()fn()期望接受期望接受StudentStudent类对象作为它的参数,来类对象作为它的参数,来自自main()main()的调用传给它一个的调用传给它一个GraduateStudentGraduateStudent类对象,类对象,fn()fn()把它视作把它视作StudentStuden
展开阅读全文