C++程序设计教程10.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:19 大小:92KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

C++程序设计教程10.ppt

C++程序设计教程10.ppt

预览

免费试读已结束,剩余 9 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C++程序设计教程(第二版)第十章内容1.继承结构(InheritanceStructure)派生类对象结构2.访问父类成员(AccessFather’sMember)子类也是基类的用户,其成员函数不能访问基类的私有成员.但子类可以区别于外来用户,让基类protected成员允许子类对象访问而不许外来对象访问.例如,对于基类:classFather{inta;protected:voidfp(){cout<<a;}public:voidprint(){cout<<a;}};3.构造子类对象(ConstructingObjectsofSubClass)自定义构造:为了规定父类构造函数的调用方式而不是默认调用,需要自定义子类构造函数,并且,在构造函数定义体的初始化列表中描述父类构造函数的调用形式.描述形式与对象成员构造的描述一致.GraduateStudent(conststring&pN,Advisor&adv):Student(pN),advisor(adv),qualifierGrade(0){}覆盖(overlap):子类定义了与祖先类(父类,或者父类的父类...)名字相同的成员.classStudent{public:voiddisplay();//...};classGraStudent:publicStudent{public:voiddisplay();//overlap//...};voidfn(){GraStudentgs;gs.display();//callGraStudent::display()}捆绑子类对象访问成员函数,则首先匹配子类,然后父类,再父类的父类,依此类推.拷贝构造:子类若没有定义拷贝构造函数,则子类对象在拷贝创建时先调用父类的拷贝构造函数,再完成自己的位对位拷贝.父类若没有定义拷贝构造函数,则子类对象在拷贝创建中调用父类默认的拷贝构造函数.赋值操作符原理相似4.继承方式(InheritanceMode)继承体系中,子类可以在祖先类成员可见的范围中调整其访问控制属性.classA{inta1;public:inta2;};classB:privateA{public:usingA::a2;//a2从私有转为公有usingA::a1;//错:a1不可见};intmain(){Bd;d.a2=1;//ok}5.继承与组合(Inheritance&Composition)继承型的Circle类头文件:#include"point.h"classCircle:publicPoint{doubleradius;public://成员函数};使用含有继承和组合的子类:只要外界不直接或无法直接使用该子类的祖先类成员或对象成员,仅提供公有的成员函数,则对外界来说,无所谓该子类的继承式包含还是组合式包含(包含组合或继承的哪种头文件都可):#include”point.h”#include“circle.h”//组合或继承intfn(){Circlec(Point(2.3,5.6),7);c.moveTo(1,2);c.modifyRadius(3);//…}6.多继承概念(Multi-InheritanceConcept)多继承的主要技术问题:由于子类可以访问多个基类,而基类之间没有专门的协调,所以,基类可能出现相同的名字,这于子类来说,要访问这种名字增加了编程的复杂性,不得不要在名字前加上前缀.然而,这种同名也许意义相同,操作这种名字本身便是一种分别性操作,不合逻辑.于是便寻求一种分离共性,统一基类的解决办法(见CH12.5).但是,不同的父类拥有共性基类,访问基类成员仍然存在相同名字冲突问题.7.多继承技术(Multi-InheritanceTechnology)2多个不同子类(如,床、沙发)在继承基类的方式上采取虚拟继承,它的作用是,当对象创建上产生基类重叠时,略去重复产生基类对象空间的行为:classBed:virtualpublicFurniture{public:voidsleep()const{cout<<"Sleeping.\n";}};3多继承这种性质的子类:classSleeperSofa:publicBed,publicSofa{public:voidfoldOut()const{cout<<"Foldout.\n";}};