书签 分享 收藏 举报 版权申诉 / 61
上传文档赚钱

类型C-程序设计教程第二版课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4568941
  • 上传时间:2022-12-20
  • 格式:PPT
  • 页数:61
  • 大小:323.50KB
  • 【下载声明】
    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

    26、t类对象予以接受。类对象予以接受。事实上,事实上,GraduateStudentGraduateStudent的内存布局,也与的内存布局,也与“gsgs是是研究生,当然也是学生研究生,当然也是学生”相吻合。相吻合。Student部分部分GraduateStudent部分部分this指针指针GraduateStudent对象对象7:22:5825n说明:说明:n捆绑子类对象可以访问父类成员函数和自身成捆绑子类对象可以访问父类成员函数和自身成员函数;员函数;n捆绑基类对象只能访问基类成员函数,不能访捆绑基类对象只能访问基类成员函数,不能访问子类成员函数问子类成员函数:ds.addCourse(3,

    27、2.5);ds.display();ds.getQualifier();/error gs.addCourse(3,3.0);gs.display();gs.getQualifier();7:22:5826 class Father int a;protected:void fp()couta;public:void print()couta;外来用户:void fn()Son d;d.print();/ok d.disp();/ok d.fp();/error Father f;f.print();/ok f.fp();/error f.disp();/error子类用户:class Son

    28、:public Father int b;public:void disp()fp();/ok print();/ok void ed()a+;/error;7:22:58273.构造子类对象(Constructing Objects of SubClass)n继承中的构造函数和析构函数的说明:继承中的构造函数和析构函数的说明:1.1.派生类构造函数的派生类构造函数的初始化列表初始化列表中列出的均是中列出的均是直接基类直接基类的构造函数。的构造函数。2.2.构造函数不能被继承,因此派生类的构造函构造函数不能被继承,因此派生类的构造函数只能通过调用基类的某个构造函数(如果有数只能通过调用基类的某

    29、个构造函数(如果有定义的话)来初始化基类子对象。定义的话)来初始化基类子对象。3.3.派生类的构造函数只负责初始化派生类的构造函数只负责初始化自己定义自己定义的的数据成员。数据成员。7:22:58284.4.派生类构造函数被调用时,在还没有执行构派生类构造函数被调用时,在还没有执行构造函数体造函数体之前之前,先调用,先调用基类基类的构造函数,再调用的构造函数,再调用派生类派生类对象成员对象成员所属类的构造函数,完成对象所所属类的构造函数,完成对象所需空间的分配;最后执行需空间的分配;最后执行派生类自身派生类自身的构造函数。的构造函数。(若基类上面还有基类,优先调用上面基类的构造(若基类上面还有

    30、基类,优先调用上面基类的构造函数;派生类的函数;派生类的对象成员对象成员的构造函数被调用的顺的构造函数被调用的顺序取决于在类中序取决于在类中声明的顺序声明的顺序)5.5.派生类的对象的生存期结束时调用派生类的对象的生存期结束时调用派生类派生类的析的析构函数,在该析构函数结束之前再调用构函数,在该析构函数结束之前再调用基类基类的析的析构函数;所以,构函数;所以,析构函数的被调用次序与构造函析构函数的被调用次序与构造函数相反。数相反。7:22:5829n默认构造:默认构造:n如果子类没有构造函数,则调用默认无参构造如果子类没有构造函数,则调用默认无参构造函数,默认构造函数首先调用父类的无参构造函数

    31、,默认构造函数首先调用父类的无参构造函数,完成父类对象部分的构造,然后构造自函数,完成父类对象部分的构造,然后构造自身身n如果父类的上面还有父类,则依次递归如果父类的上面还有父类,则依次递归7:22:5830n自定义构造:自定义构造:n为了规定父类构造函数的调用方式,而不是默认为了规定父类构造函数的调用方式,而不是默认调用,需要自定义子类构造函数,并且,在子类调用,需要自定义子类构造函数,并且,在子类构造函数定义体的始化列表中构造函数定义体的始化列表中(即冒号后面即冒号后面)描述描述父类构造函数的调用形式父类构造函数的调用形式 描述形式与对象成员构造的描述一致描述形式与对象成员构造的描述一致7

    32、:22:5831nclass Advisorclass Advisorn int noOfMeeting int noOfMeeting;npublic:public:n Advisor()cout Advisor()coutAdvisorn;Advisorn;n Advisor(Advisor(const Advisor&const Advisor&)cout)coutcopy copy Advisorn;Advisorn;n Advisor()cout Advisor()coutAdvisorn;Advisorn;n;/-;/-nclass Studentclass Studentn st

    33、ring name;string name;n int semesterHours int semesterHours;n double average;double average;npublic:public:n Student(string Student(string pNamepName=noName):name(pName),average(0),semesterHo=noName):name(pName),average(0),semesterHours(0)urs(0)7:22:5832nvoid addCourse(intvoid addCourse(int hours,do

    34、uble grade)hours,double grade)n double totalGrade=(semesterHours double totalGrade=(semesterHours *average+average+grade);grade);/总分总分n semesterHourssemesterHours+=hours;+=hours;/总修学时总修学时n average=semesterHours?average=semesterHours?totalGrade/semesterHourstotalGrade/semesterHours:0;:0;/平均分平均分n nvoi

    35、d display()void display()n cout coutname=name,hours=“name=name,hours=“semesterHours semesterHours,average=averagen;,average=averagen;n nint getHours()return semesterHoursint getHours()return semesterHours;ndouble getAveragedouble getAverage()return average;()return average;n Student()Student()cout c

    36、outStudentn;Studentn;n;7:22:5833nclass GraduateStudentclass GraduateStudent:public Studentpublic Student n Advisor advisor Advisor advisor;n int qualifierGrade int qualifierGrade;npublic:public:n GraduateStudentGraduateStudent(const string&pN(const string&pN,Advisor&adv),Advisor&adv)n :Student(pN:St

    37、udent(pN),),advisor(advadvisor(adv),),qualifierGrade(0)qualifierGrade(0)/Student/Student是基类的构造函数名,即调用基类构造函数是基类的构造函数名,即调用基类构造函数n void void display()display()n Student:displayStudent:display();();/调用基类中的函数调用基类中的函数n coutGraduateStudentncoutGraduateStudentn;n n getQualifier()return qualifierGrade getQua

    38、lifier()return qualifierGrade;n;7:22:5834nvoid fn(void fn(AdvisorAdvisor&advisor)&advisor)n GraduateStudent gsGraduateStudent gs(Yen(Yen Kay Doodle,Kay Doodle,advisor);advisor);n gs.display gs.display();();n/-/-nintint main()main()n Advisor da Advisor da;n fn(da fn(da););n 运行结果:运行结果:AdvisAdvisor rco

    39、py Advisorcopy Advisorname=Yen Kay Doodle,hours=0,average=0name=Yen Kay Doodle,hours=0,average=0GraduateStudentGraduateStudentAdvisorAdvisorStudentStudentAdvisorAdvisor7:22:5835n说明:说明:n1 1)派生类对象构造时,)派生类对象构造时,先构造基类,再对象成先构造基类,再对象成员,最后是派生类自身员,最后是派生类自身n2 2)派生类构造函数的初始化列表中,直接调用)派生类构造函数的初始化列表中,直接调用基类的构造函数基

    40、类的构造函数n3 3)如果派生类中定义了与基类名字相同的成员,)如果派生类中定义了与基类名字相同的成员,捆绑子类对象访问此成员时,则首先匹配子类,捆绑子类对象访问此成员时,则首先匹配子类,然后父类,再父类的父类,依此类推然后父类,再父类的父类,依此类推ngs.displaygs.display();();/call GraStudent:display /call GraStudent:display()()7:22:5836n拷贝构造:拷贝构造:n子类若没有定义拷贝构造函数,则子类对象在子类若没有定义拷贝构造函数,则子类对象在拷拷贝创建贝创建时先调用父类的拷贝构造函数,再调用时先调用父类的拷

    41、贝构造函数,再调用自自己的默认拷贝构造函数己的默认拷贝构造函数完成自己的位对位拷贝完成自己的位对位拷贝若父类没有定义拷贝构造函数,则子类对象在拷若父类没有定义拷贝构造函数,则子类对象在拷贝创建中调用父类默认的拷贝构造函数贝创建中调用父类默认的拷贝构造函数n同样,如果子类申请了资源,需要定义拷贝构造同样,如果子类申请了资源,需要定义拷贝构造函数函数n赋值操作符赋值操作符“”原理相似原理相似n当使用子类为父类初始化或赋值时:当使用子类为父类初始化或赋值时:nStudent Student ds=gsds=gs;(使用(使用gsgs对象中基类部分)对象中基类部分)nds=gsds=gs;7:22:5

    42、8375.继承与组合(Inheritance&Composition)n组合:组合:新的、复杂的对象由已存在的、相对简单新的、复杂的对象由已存在的、相对简单的对象组成。即:的对象组成。即:类的数据成员是另一个类的对类的数据成员是另一个类的对象象。对象由若干个子对象组成。对象由若干个子对象组成。u类中含有对象成员,称为组合式包含类中含有对象成员,称为组合式包含n继承:继承:子类继承了父类,称为子类对象对父类对子类继承了父类,称为子类对象对父类对象的继承式包含象的继承式包含n继承和组合都重用了类设计继承和组合都重用了类设计7:22:5838nGraduateStudentGraduateStude

    43、nt组合组合了了AdvisorAdvisor称称GraduateStudentGraduateStudent 有一个有一个AdvisorAdvisornGraduateStudentGraduateStudent类继承了类继承了StudentStudent类称类称GraduateStudentGraduateStudent 是一个是一个StudentStudent继承部分派生部分其他数据成员Student对象对象Advisor对象对象研究生对象组合式组合式包含包含继承式继承式包含包含7:22:5839n继承与组合两者在使用上不同继承与组合两者在使用上不同继承重用场合继承重用场合,子类就,子类就

    44、是是一种父类,所以,无须一种父类,所以,无须捆绑父类对象便能直接对其捆绑父类对象便能直接对其共有和保护成员共有和保护成员操操作作组合重用场合组合重用场合,使用对象成员的操作,使用对象成员的操作,只能捆绑只能捆绑对象成员对象成员对其对其公有成员公有成员进行操作。进行操作。nvoid GraduateStudent:printvoid GraduateStudent:print()()display();display();/继承得到继承得到 coutGraduateStudentncoutGraduateStudentn;advisor.printadvisor.print();();/组合方式

    45、组合方式 7:22:5840例:例:class Vehicle class Vehicle/车辆类车辆类 /;class Motor class Motor /发动机类类 /;class Carclass Car:public:public Vehicle Vehicle public:public:Motor motorMotor motor;void vehicleFn(Vehiclevoid vehicleFn(Vehicle&v);&v);void motorFn(Motorvoid motorFn(Motor&m);&m);intint main()main()Car c;Car c

    46、;VehicleFn(c VehicleFn(c););motorFn(c motorFn(c););motorFn(motorFn(c.motorc.motor););/ok/ok/error7:22:5841继承型的继承型的CircleCircle类头文件:类头文件:#includepoint.hclass Circle:public Point double radius;public:/成员函数成员函数;组合型的组合型的CircleCircle类头文件:类头文件:#includepoint.hclass Circle Point point;double radius;public:/

    47、成员函数成员函数;公有成员函数实现不同,但可以让界面相同,从而不影响编程者使用继承与组合在于实现技术不同7:22:5842使用含有继承和组合的子类:使用含有继承和组合的子类:n只要外界不直接或无法直接使用该子类的祖先类成员或只要外界不直接或无法直接使用该子类的祖先类成员或对象成员,仅提供公有的成员函数,则对外界来说,无对象成员,仅提供公有的成员函数,则对外界来说,无所谓该子类的继承式包含还是组合式包含所谓该子类的继承式包含还是组合式包含(包含组合或包含组合或继承的哪种头文件都可继承的哪种头文件都可):#include”point.h”#include“circle.h”/组合或继承组合或继承i

    48、nt fn()Circle c(Point(2.3,5.6),7);c.moveTo(1,2);c.modifyRadius(3);/7:22:58436.多继承概念(Multi-Inheritance Concept)n多重继承即多继承:多重继承即多继承:由多个基类派生新由多个基类派生新的类的类 例如,两用沙发,它是一个沙发,也是例如,两用沙发,它是一个沙发,也是一张床,两用沙发应允许同时继承沙发和床的一张床,两用沙发应允许同时继承沙发和床的特性,即特性,即SleeperSofaSleeperSofa类继承类继承BedBed和和SofaSofa两个两个类。类。7:22:5844Sleep()

    49、SetWeight()BedWeightWatchTv()SetWeight()SofaWeightFoldOut()SleeperSofa沙发床的类结构沙发床的类结构7:22:5845class Bedclass Bedprotected:protected:int int weight;weight;public:public:Bed():weight(0)Bed():weight(0)void sleep()const void sleep()const coutcoutSleeping.nSleeping.n;void setWeight(int void setWeight(int

    50、i)weight=i;i)weight=i;class Sofaclass Sofaprotected:protected:int int weight;weight;public:public:Sofa():weight(0)Sofa():weight(0)void watchTV()const void watchTV()const coutcout Watching TV.n;Watching TV.n;void setWeight(int void setWeight(int i)i)weight=i;weight=i;7:22:5846nclass SleeperSofaclass

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C-程序设计教程第二版课件.ppt
    链接地址:https://www.163wenku.com/p-4568941.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库