精选课件第4章派生新类.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
精选课件第4章派生新类

第4章派生新类 《解析C++面向对象程序设计》 第4章 派生新类 内容提要 4.1 类层次的问题 4.2 派生与继承 4.3 派生类(重点) 4.4 多继承与虚拟继承 提出问题 【例4-1】编写一个程序实现小型公司的工资管理。该公司主要有4类人员:经理、兼职技术员、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。 月工资计算办法是:经理拿固定月工资8000元;兼职技术员按每小时100元领取月工资;销售员按该当月销售额的6%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售总额的5‰。 分析问题 由于对这4类人员的月工资计算方法不同,显示信息的内容也不同,因此不能用同一个类来描述,我们设计4个类分别描述这4类人员。但是,这4个类中又有很多相同的,如姓名、编号、工资,都要计算月工资和显示信息等,只是各自的实现方法有所不同。 按照常规思维方式,我们应该先统一描述该公司全体员工的共性以及对全体人员的处理功能;描述某一类人员时,首先说明他是该公司的员工,然后再逐一描述该类人员的个性。这种描述方法反映到面向对象的程序设计中就是类的继承与派生。对各类人员的统一描述就构成了一个基类,而对每一类人员的特殊描述就可以通过从基类创建派生类来实现。 这个问题涉及多个相关的类,他们具有一些共同特征,因此,我们可以定义一个统一他们属性和操作的类,如employee类,再从该类进行衍生(派生),类似于人类社会的繁衍。 这就是本章要介绍的派生与继承。 4.2.1 派生 class A { int i; //基类成员 }; class B:public A //A派生了B,B继承了A,B自动拥有A的成员 { int j; //定义派生类的新成员 }; 4.3.1 派生类定义 派生类的定义格式如下: class 派生类名:继承方式 基类名 { 派生类新定义成员 }; 类的继承方式有public(公有继承)、protected(保护继承)和private(私有继承)三种, 三种继承方式下派生类中基类成员的访问控制权限如表4-1所示。 先看一个简单例子。例4-7。教材P225 公有继承 例4-2 从Point类派生出新的Rectangle类。 矩形是由一个点加上长、宽构成,矩形的点具备了Point类的全部特征,同时,矩形自身也有一些特点,这就需要在继承Point类的同时添加新的成员。 这两个类的继承关系可以用UML图描述,如图4-4所示。教材P214 保护继承和私有继承 例4-3 保护成员具有两面性,对外界(如主函数或非派生类的成员函数)而言是不可见的,但对于它的派生类则是可见的。 将例4-3的继承方式改为私有继承。运行程序,其结果与例4-3完全相同。 4.3.4 派生类的构造函数和析构函数 例4-4,为什么结果与例4-2不一致? 原因是不能在派生类构造函数体中显式调用构造函数!虽然能通过编译,但结果不对: Rectangle(float x, float y, float w, float h)//派生类构造函数 { Point(x,y); //调用基类构造函数 W=w;H=h; } 解决的办法是通过成员初始化表来完成,在成员初始化表中可以显式调用基类构造函数。 派生类名(总参数表):基类名(参数表1),对象成员名(参数表2) { 派生类数据成员的初始化 }; Rectangle(float x,float y,float w,float h):Point(x,y) {W=w;H=h;} 或: Rectangle(float x,float y,float w,float h):Point(x,y),W(w),H(h){} 提出问题 构造函数和析构函数的调用顺序如何呢? 看一个简单问题:例4-7,教材P225 构造函数调用顺序为:基类的构造函数→对象成员构造函数→派生类的构造函数。 析构函数调用顺序刚好相反。 例4-6,教材P222(自看) 现在可以来解决例4-1提出的问题了。 但是销售经理具有经理和销售员的特征,即由两个基类派生而来,这涉及多继承。 4.4 多继承与虚拟继承 一个类可以从一个或者多个基类派生而来。根据派生类继承基类的个数,将继承分为单继承和多继承。 当派生类有多个基类时称为多继承。单继承可以看作是多继承的一个特例,多继承可以看作是多个单继承的组合,它们有很多相同特性。 多继承派生类的定义 class 派生类名:继承方式 基类名1,…,继承方式 基类名n { 派生类新定义成员 }; 多继承派生类的构造函数 派生类名(总参数表):基类名1(参数表1),…, 基类名n (参数表n) {

文档评论(0)

jsntrgzxy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档