C大学基础教程第九章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C大学基础教程第九章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 基础教程 第九 课件
- 资源描述:
-
1、C+大学基础教程大学基础教程第第9 9章章 继承与派生继承与派生北京科技大学北京科技大学-2-第第9 9章章 继承与派生继承与派生9.1 9.1 继承的概念继承的概念 9.2 9.2 继承方式继承方式 9.3 9.3 派生类构造函数的定义派生类构造函数的定义 9.4 9.4 多继承多继承 -3-第第9 9章章 继承与派生继承与派生软件重用软件重用-4-第第9 9章章 继承与派生继承与派生类具有封装性、继承性和多态性类具有封装性、继承性和多态性-5-继承的概念继承的概念自行车自行车-6-继承的概念继承的概念-7-继承的概念继承的概念-8-继承的概念继承的概念-9-Bicycle Mountain
2、BikesRacingBikesTandemBikesis-a relationships继承的概念继承的概念-10-第第9 9章章 继承与派生继承与派生主要介绍:主要介绍:n继承和派生的概念继承和派生的概念n继承方式;继承方式;n派生类的构造函数与析构函数;派生类的构造函数与析构函数;n多继承中的二义性多继承中的二义性n虚基类。虚基类。 -11-9.1 9.1 继承的概念继承的概念 类的继承类的继承是在现有类的基础之上,创建新类的是在现有类的基础之上,创建新类的机制机制。称现有的类为称现有的类为基类基类,新建立的类为新建立的类为派生派生类类。n新类继承了基类的属性和行为新类继承了基类的属性和
3、行为n新类是基类的特殊情况。新类是基类的特殊情况。不必从不必从“草稿草稿”开始创建特殊的程序对象开始创建特殊的程序对象继承是处理继承是处理“特殊情况特殊情况”的面向对象编程机制的面向对象编程机制 -12-派生类的定义格式派生类的定义格式 class class 派生类名:继承方式派生类名:继承方式 基类名基类名 public: public: / /派生类公有成员派生类公有成员 private:private: / /派生类私有成员派生类私有成员 派生类只有派生类只有一个直接基一个直接基类为类为单继承单继承-13-例例: 定义基类定义基类shapeclassclass shapeshape p
4、rivateprivate: : intint m_xm_x, ,m_ym_y; ; /位置位置 charchar m_colorm_color; ; /颜色颜色publicpublic: : voidvoid setpositionsetposition( (intint x x, , intint y y);); voidvoid setcolorsetcolor( (charchar colorcolor);); intint getxgetx();(); intint getygety();(); charchar getcolorgetcolor();();-14-定义派生类定义派生
5、类(等边三角形类等边三角形类)classclass TriangleTriangle: : publicpublic Shape Shape publicpublic: :TriangleTriangle( (intint x x, , intint y y, , charchar colorcolor= =RR, , floatfloat slenslen = 1); = 1);floatfloat GetSideLengthGetSideLength() () constconst; ;voidvoid SetTriangleSetTriangle( (intint x x, , inti
6、nt y y, , charchar colorcolor, , floatfloat slenslen););voidvoid DrawDraw();();privateprivate: :floatfloat m_m_SideLengthSideLength; ;-15-派生新类派生新类: :circle circle 圆形圆形rectangle rectangle 矩形矩形triangle triangle 三角形三角形 基类称为基类称为父类父类派生类称为派生类称为子类子类 shapecirclerectangletriangle-16-派生类的定义格式派生类的定义格式 class cl
7、ass 派生类名:继承方式派生类名:继承方式 基类名基类名1, 1, 继承方式继承方式 基类名基类名n n public: public: / /派生类公有成员派生类公有成员 private:private: / /派生类私有成员派生类私有成员 有多个基类有多个基类派生类有多派生类有多个基类为个基类为多继承多继承-17-例例: :已有基类已有基类base1,base2,base3base1,base2,base3,定义派生类定义派生类deriverderiverclassclass deriverderiver: :publicpublic base1,public base2base1,pu
8、blic base2,private base3private base3 privateprivate: : intint m_m_derdataderdata; ;publicpublic: : voidvoid derfunctionderfunction();();-18-注意注意每一个每一个“继承方式继承方式”,只用于限制对紧随其后,只用于限制对紧随其后之基类的继承。之基类的继承。类的继承方式是派生类对基类成员的继承方式。类的继承方式是派生类对基类成员的继承方式。类的继承方式指定了类外对象对于派生类从基类的继承方式指定了类外对象对于派生类从基类继承来的成员的访问权限。类继承来的成员的
9、访问权限。-19-直接基类和间接基类直接基类和间接基类class baseclass base ; ;class deriver1:public baseclass deriver1:public base ; ;class deriver2:public deriver1class deriver2:public deriver1 父类被称为子类的直接基类直接基类 父类的父类或更高层次的父类被称为这个子类的间接基间接基类类 -20-派生与继承的实例 公司人员管理系统公司人员管理系统: 小型公司人员分为小型公司人员分为: : 经理、兼职技术人员、销售经理和经理、兼职技术人员、销售经理和兼职推销
10、员兼职推销员. .要求要求: :存储所有人员的姓名、编号、级别、当月薪水,计算月薪存储所有人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。总额并显示全部信息。人员编号在生成人员信息时同时生成,每输入一个人员信人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加息编号顺序加1 1。 程序能够对不同人员按不同方法提升级别,月薪的计算程序能够对不同人员按不同方法提升级别,月薪的计算方法是:方法是:n经理拿固定月薪经理拿固定月薪; ;n兼职技术人员按工作小时数领取月薪兼职技术人员按工作小时数领取月薪; ;n兼职推销员的报酬按该推销员当月销售额提成兼职推销员的报酬按该推销员当月销
11、售额提成; ;n销售经理既拿固定月薪也领取销售提成。销售经理既拿固定月薪也领取销售提成。 -21-派生与继承的实例 分析:分析:描述全体职员的共性(基类)描述全体职员的共性(基类)描述每一类特殊人员(派生类)描述每一类特殊人员(派生类) -22-class employeeprotected:char *name;/姓名姓名int individualEmpNo;/个人编号个人编号int grade; /级别级别float accumPay;/月薪总额月薪总额static int employeeNo;/本公司职员编号目前最大值本公司职员编号目前最大值public:employee();/构造
12、函数构造函数employee();/析构函数析构函数void pay(); /计算月薪函数计算月薪函数void promote(int);/升级函数升级函数void displayStatus();/显示人员信息显示人员信息; -23-class technician: public employee/兼职技术人员类兼职技术人员类private: float hourlyRate; / /每小时酬金每小时酬金 int workHours;/当月工作时数当月工作时数public:technician();/构造函数构造函数 void pay(); /计算月薪函数计算月薪函数void displa
13、yStatus();/显示人员信息显示人员信息;新增加的成员新增加的成员同名覆盖,改造基类成员同名覆盖,改造基类成员 派生类的成员派生类的成员: : 1. 1. 从基类继承的成员从基类继承的成员; ; 2. 2. 改造基类成员改造基类成员; ; 3. 3. 添加派生类新成员添加派生类新成员. .-24-9.2 9.2 继承方式继承方式 三种继承方式三种继承方式 publicpublic、protectedprotected、privateprivate 不同继承方式的影响主要体现在:不同继承方式的影响主要体现在: n派生类派生类 成员成员 对基类成员的访问控制。对基类成员的访问控制。 n派生类
14、派生类 对象对象 对基类成员的访问控制。对基类成员的访问控制。定义派生类时要声明继承方式定义派生类时要声明继承方式 -25-9.2.1. 9.2.1. 派生类的定义派生类的定义 派生类的定义形式:派生类的定义形式: class class 派生类名:继承方式派生类名:继承方式 基类基类1, 1, 继承方式继承方式 基类基类2,2, ,继承方式继承方式 基类基类n n 派生类成员声明;派生类成员声明; ;-26-例如例如: : 设已有基类设已有基类base1base1和和base2base2,定义派生类定义派生类deriver.deriver.class deriver: public base
15、1,private base2class deriver: public base1,private base2 private: private: intint newmembernewmember; ; public: public: void void newfunnewfun();();-27-单继承情况,派生类的定义单继承情况,派生类的定义 class class 派生类名:继承方式派生类名:继承方式 基类名基类名 派生类成员声明派生类成员声明 ;-28-例例9.1 9.1 图形类及其派生类的声明图形类及其派生类的声明classclass Shape Shape publicpubl
16、ic: :Shape(Shape(intint x x=0, =0, intint y y=0, =0, charchar c = c = RR););intint GetXGetX() () constconst; ;voidvoid SetXSetX( ( intint x x););intint GetYGetY() () constconst; ;voidvoid SetYSetY( ( intint x x););charchar GetColorGetColor() () constconst; ;voidvoid SetColorSetColor( (charchar c); c
17、);protectedprotected: :charchar m_colorm_color; ;intint m_xm_x; ;intint m_ym_y; ;-29-classclass Circle : Circle : publicpublic Shape Shape publicpublic: :Circle(Circle(intint x x, , intint y y, , floatfloat r=1, r=1, charchar colorcolor= =RR);); float float GetRadiusGetRadius () () constconst; ;void
18、void SetCircleSetCircle( (intint x x, , intint y y, , floatfloat r, r, charchar colorcolor);); void void DrawDraw();();privateprivate: :floatfloat m_Radiusm_Radius; ;-30-classclass TriangleTriangle: : publicpublic Shape Shape publicpublic: :TriangleTriangle( (intint x x, , intint y y, , charchar col
19、orcolor= =RR, , floatfloat slenslen = 1); = 1);floatfloat GetSideLengthGetSideLength() () constconst; ;voidvoid SetTriangleSetTriangle( (intint x x, , intint y y, , charchar colorcolor, , floatfloat slenslen););voidvoid DrawDraw();();privateprivate: :floatfloat m_m_SideLengthSideLength; ;-31-classcl
20、ass RectangleRectangle: : publicpublic Shape Shape publicpublic: :RectangleRectangle( (intint x x, , intint y y, , charchar colorcolor, , intint lengthlength=10, =10, intint widthwidth=10);=10);intint GetWidthGetWidth() () constconst; ;intint GetHeightGetHeight() () constconst; ;voidvoid DrawDraw();
21、();voidvoid SetRectangleSetRectangle ( (intint x x, , intint y y, , charchar colorcolor, , intint lengthlength, , intint widthwidth););privateprivate: :intint m_Widthm_Width; ;intint m_Lengthm_Length; ;-32- 从基类从基类 继承的继承的 成员成员 派生类的成员包括:(派生类的成员包括:(1 1)继承基类的成员,()继承基类的成员,(2 2)派生)派生类定义时声明的成员。类定义时声明的成员。 派
22、生类自己增加的成员,完成两个需求:派生类自己增加的成员,完成两个需求:(1)(1)修改基类修改基类成员,(成员,(2 2)描述新的特征或方法。)描述新的特征或方法。 m_color;m_color;m_x; m_y;m_x; m_y;GetXGetX();();SetXSetX();();GetYGetY();();SetYSetY();();GetColorGetColor();();SetColorSetColor();();m_Radius;m_Radius;GetRadiusGetRadius () () SetCircleSetCircle();();DrawDraw();();m_
23、color;m_color;m_x; m_y;m_x; m_y;GetXGetX();();SetXSetX();();GetYGetY();();SetYSetY();();GetColorGetColor();();SetColorSetColor();();m_m_SideLengthSideLength; ;GetSideLengthGetSideLength(); (); SetTriangleSetTriangle();(); DrawDraw();();m_color;m_color;m_x; m_y;m_x; m_y;GetXGetX();();SetXSetX();();Ge
24、tYGetY();();SetYSetY();();GetColorGetColor();();SetColorSetColor();();m_Width; m_Length;m_Width; m_Length; GetWidthGetWidth(); (); GetHeightGetHeight(); (); DrawDraw();(); SetRectangleSetRectangle();(); 派生类派生类 增加的增加的 成员成员-33-同名覆盖同名覆盖 派生类修改基类的成员,是在派生类中声明了派生类修改基类的成员,是在派生类中声明了一个与基类成员同名的新成员。在派生类作用一个与基类成
25、员同名的新成员。在派生类作用域内或者在类外通过派生类的对象直接使用这域内或者在类外通过派生类的对象直接使用这个成员名,只能访问到派生类中声明的同名新个成员名,只能访问到派生类中声明的同名新成员,这个新成员覆盖了从基类继承的同名成成员,这个新成员覆盖了从基类继承的同名成员,这种情况称为员,这种情况称为同名覆盖同名覆盖。 -34-class Shapeclass Shape public:public: void void DrawDraw();();protectedprotected: : ;classclass TriangleTriangle: : publicpublic Shape S
展开阅读全文