第七章继承与派生(1)

上传人:沈*** 文档编号:244030938 上传时间:2024-10-02 格式:PPT 页数:46 大小:479.50KB
返回 下载 相关 举报
第七章继承与派生(1)_第1页
第1页 / 共46页
第七章继承与派生(1)_第2页
第2页 / 共46页
第七章继承与派生(1)_第3页
第3页 / 共46页
点击查看更多>>
资源描述
*,中国民航飞行学院,C+,继承,C+,语言程序设计,第,一,单元,继承和派生,第七章 继承与派生,1,第七章 继承与派生,教学目的:,通过本章的学习,学生应掌握继承的概念,定义派生类;熟悉不同继承方式下对基类成员的访问控制;学习使用虚基类解决二义性问题。,教学重点:,派生类的声明;继承中的访问控制。,教学难点:,不同继承方式下对基类成员的访问控制,教学手段:,电子教案,2,本章主要内容,类的继承与派生,类成员的访问控制,单继承与多继承,派生类的构造、析构函数,类成员的标识与访问,3,7.1,继承和派生,7.1.1,继承与派生问题举例,工具车,轿车,面包车,小汽车,卡车,旅行车,汽车,火车,飞机,轮船,交通工具,基类,子类,继承使描述事物的能力大大增强和简单化。,4,继承与派生问题举例,狮,虎,豹,猫科动物,家犬,狼,豺,犬科动物,哺乳动物,动物,类的继承与派生,5,继承与派生问题举例,Triangle,Rectangle,Circle,Shape,Shape,Draw(),Move(),GetColor,(),SetColor,(),Triangle,Point,v1,v2,v3,Draw(),Move(),Rectangle,Point v1,v2,Draw(),Move(),Circle,Point origin,float radius,Draw(),Move(),A,B,B,类继承,A,类,A,B,A,包含,B,6,继承与派生问题举例,兼职技术人员,销售经理,管理人员,销售人员,雇员,类的继承与派生,7,employee,name,serialNo,grade,salary,Pay(),Promote(),ShowStatus,(),technician,hourlyRate,workHours,Pay(),ShowStatus,(),manager,Pay(),ShowStatus,(),salesperson,saleAmount,Pay(),ShowStatus,(),salesmanager,Pay(),ShowStatus,(),8,类的继承与派生,新类从已有类得到已有的特性的过程称为,继承,。,在已有类的基础上新增自己的特性而产生新类的过程称为,派生,。,被继承的已有类称为,基类,(或父类)。,派生出的新类称为,派生类,(或子类),。,base class,derived class,9,继承与派生的目的,类的继承和派生机制允许在已有类的基础上,进行更具体、更详细的修改和扩充。,类的派生是一种演化、发展的过程。,继承的目的:实现代码,重用。,派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行,扩充。,10,7.1.2,派生类的声明,class,派生类名,:,继承方式,基类名1,继承方式,基类名1,继承方式,基类名,n,派生类成员声明;,Class Dr1:public Base1,private Base2,public:,Dr1();,Dr1();,11,派生类的声明,一个派生类同时有多个直接基类,称为,多继承。,一个派生类只有一个直接基类,称为,单继承。,A,B,C,D,A,B,C,12,1.一个类从父类继承来的特征也可以被其他新的类所继承。,类似于:祖父,父亲,儿子,孙子,2.一个父类的特征,可以同时被多个子类继承。,类似于:祖父,多个儿子,3.直接基类,在类族中,直接参与派生出某类的基类称为直接基类。,4.间接基类,基类的基类甚至更高层的基类也称为间接基类,13,继承方式,继承方式规定了如何访问从基类继承的成员。,继承方式关键字,public:,公有继承,protected:,保护继承,private:,私有继承,派生类成员,派生类成员是指除了从基类继承来的所有成员之外,新增加的数据和函数成员。,派生过程是很重要的,若没有派生过程,而只有继承过程,也是没有意义。,14,7.1.3,派生类生成过程,派生新类的生成过程:,吸收基类成员,改造基类成员,添加新的成员,最,主要目的:,面向对象的继承和派生机制,其最主要的目的是实现代码的重用和扩充。,吸收基类成员就是代码,重用,的过程,而对基类成员进行改造和添加新的成员就是原有代码的,扩充,过程。,15,class employee,protected:,char *name;,int individualNo,;,int,grade;,float,accumPay,;,static,int employeeNo,;,public:,employee();,employee();,void pay();,void promote(,int,);,void,displaystatus,();,;,16,class technician:,public,employee,/,兼职技术人员类,private:,float,hourlyRate,;,/,每,小时酬金,int workHours,;,/,当月工作时数,public:,technician();,/,构造函数,void pay();,/,计算月薪函数,void,displaystatus,();,;,/,显示人员信息,employee,name,individualNo,grade,accumPay,employeeNo,pay(),promote(),displayStatus,(),hourlyRate,workHours,pay(),displaystatus,(),technician,17,employee,name,individualNo,grade,accumPay,employeeNo,pay,promote,displaystatus,technicain,新增部分,hourlyRate,workHours,pay,displaystatus,employee,technicain,/姓名,/个人编号,/级别,/,月新总额,/本公司职员编号目前最大值,/计算月薪函数,/升级函数,/显示人员信息,/每小时酬金,/当月工作时数,/计算月薪函数,/显示人员信息,18,继承与组合,继承和组合,都发挥了重用机制,将以前设计好的类采用“拿来主义”,但两者在语义和使用上不同。,继承的语义:,派生类,is a kind of,基类,Car is a kind of Vehicle,组合的语义:,派生类,is part of,基类,Engine is part of Car,19,7.2 访问控制,继承方式,不同继承方式的影响主要体现在:,1、派生类,成员,对从基类继承来的成员的访问。,2、派生类,对象,对从基类继承来的成员的访问。,三种继承方式,公有继承,私有继承,保护继承,类成员的访问控制,20,7.2.1,公有继承(,public),基类的,public,和,protected,成员的访问属性在派生类中,保持不变,,,但,基类的,private,成员,不可访问,。,派生类中的成员函数可以直接访问基类中的,public,和,protected,成员,但不能访问基类的,private,成员。,通过派生类的对象只能访问基类的,public,成员。,类成员的访问控制,21,class Base,public:,int,m1;,protected:,int,m2;,private:,int,m3;,;,class,Dclass,:,public,Base,public:,void test(),m1=1;,m2=2;,m3=3;,;,22,class Base,public:,int,m1;,protected:,int,m2;,private:,int,m3;,;,class,Dclass,:,public,Base,public:,void test(),m1=1;,m2=2;,m3=3;,;,23,void main(),Dclass,d1;,d1.m1=1;,d1.m2=2;,d1.test();,Base,public:,int,m1;,protected:,int,m2;,Dclass,public:,void test();,Dclass,private:,int,m3;,24,例7-1 公有继承举例,class Point,/,基类,Point,类的声明,public:,/,公有函数成员,void,InitP,(float,xx,=0,float,yy,=0),X=,xx,;Y=,yy,;,void Move(float,xOff,float,yOff,),X+=,xOff,;Y+=,yOff,;,float,GetX,()return X;,float,GetY,()return Y;,private:,/,私有数据成员,float X,Y;,;,25,class Rectangle:,public Point,/,派生类声明,public:,/,新增公有函数成员,void,InitR,(float x,float y,float w,float h),InitP,(x,y);W=w;H=h;,/,调用基类公有成员函数,float,GetH,()return H;,float,GetW,()return W;,private:,/,新增私有数据成员,float W,H;,;,26,#,include,#include,int,main(),Rectangle,rect,;,rect.,InitR,(2,3,20,10);,/,通过派生类对象访问基类公有成员,rect.Move(3,2);,cout,rect.,GetX,(),rect.,GetY,(),rect.,GetH,(),rect.,GetW,(),endl,;,return 0;,27,7.2.2,私有继承,(,private),基类的,public,和,protected,成员都以,private,身份出现在派生类中,但基类的,private,成员不可访问。,派生类中的成员函数可以直接访问基类中的,public,和,protected,成员,但不能访问基类的,private,成员。,通过派生类的对象不能访问基类中的任何成员。,类成员的访问控制,28,Base,private:,int,m1;,private:,int,m2;,Dclass,public:,void test();,Dclass,private:,int,m3;,class Base,public:,int,m1;,protected:,int,m2;,private:,int,m3;,;,29,class,Dclass,:,private,Base,public:,void test(),m1=1;,m2=2;,m3=3;,;,void main(),Dclass,d1;,d1.m1=1;,d1.m2=2;,d1.test();,30,例7-2 私有继承举例,class Point,/,基类,Point,类的声明,public:,/,公有函数成员,void,InitP,(float,xx,=0,float,yy,=0),X=,xx,;Y=,yy,;,void Move(float,xOff,float,yOff,),X+=,xOff,;Y+=,yOff,;,float,GetX,()return X;,float,GetY,()return Y;,private:,/,私有数据成员,float X,Y;,;,31,例7-2 私有继承举例,class Rectangle,:private Point,/,派生类声明,public:,/,新增外部接口,void,InitR,(float x,float y,float w,float h),InitP,(x,y);,W=w;H=h;,/,派生类,访问基类公有成员,void Move(float,xOff,float,yOff,)Point:Move(,xOff,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!