6-继承与多态性.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6-继承与多态性

*;继承性和多态性;继承性和多态性; 新问题:如何扩展? 1)类的扩展:深大计算机与软件学院成立,为给计算机与软件学院学生创造好的学习环境,学校规定,软件学院新生可以在宿舍装电脑,如何修改宿舍管理系统? 2)类的抽象:不准养狗-不准养宠物 ; 新问题:如何扩展? 3)此类问题的特点:类与类之间存在IS-A关系 软件学院新生也是一类新生,但其行为与一般的新生有所不同(更准确的说是有所扩展) 狗是宠物,猫是宠物,小强也是宠物——“宠物”概念的提出,可以使狗、猫、小强…等的一些共同性的行为被提取出来 ; 1.继承及其重要性 1)自然界的继承 ; 2)一个继承的关系(上图水果的继承关系) 苹果是一种水果(苹果继承了水果的共性行为); 国光苹果是一种苹果(国光苹果继承了苹果的共性行为); ??? 梨是一种水果;??? 雪梨是一种梨; ??? 蕉是一种水果;??? 香蕉是一种蕉;;3)“IS-A”关系:表示了一种继承关系。相当于,苹果是一种水果,梨是一种梨;苹果是一种水果:苹果具有水果共同有的特点,同时兼有苹果所特有的特点。 4)“HAS-A”关系:描述了一种聚集关系(组成关系) 。例如:水果由果皮、果肉、果核等组成。 ;6)计算机应用中的实际问题 类的封装形式为用户提供了一种自定义数据类型。随着用户需求的变动,原来的数据类型可能无法满足用户的新要求;按照传统程序设计方法,就要改写(甚至重写)这些前面定义的数据类型。由于改写了数据类型,用户原来的程序就很可能无法使用。 ;面向对象程序设计致力于解决此类问题。它提供“继承”这种机制,通过继承机制,可以方便地把这些原有程序进行改造,扩充,达到用户的新要求 用户不必直接修改(更不必重写)原有的程序,而是利用系统所提供的“继承”定义,使用原来定义的数据类型,方便地定义出新的数据类型。 这样,不仅能重用原来的程序,而且还能不断扩展新的程序,适应用户需求的变化。;*;*;C++继承形式主要有单重继承、多重继承等两种。如下图所示:;*;*;派生类定义举例 ;*;派生类分为两大部分: 一部分是从基类继承来的成员,另一部分是在声明派生类时增加的部分。 每一部分均分别包括数据成员和成员函数。; ;构造一个派生类包括以下3部分工作: (1) 从基类接收成员。派生类把基类全部的成员(不包括构造函数和析构函数)接收过来,也就是说是没有选择的,不能选择接收其中一部分成员,而舍弃另一部分成员。 要求我们根据派生类的需要慎重选择基类,使冗余量最小。事实上,有些类是专门作为基类而设计的,在设计时充分考虑到派生类的要求。 (2) 调整从基类接收的成员。接收基类成员是程序人员不能选择的,但是程序人员可以对这些成员作某些调整。;(3) 在声明派生类时增加的成员。这部分内容是很重要的,它体现了派生类对基类功能的扩展。 此外,在声明派生类时,一般还应当自己定义派生类的构造函数和析构函数,因为构造函数和析构函数是不能从基类继承的。;既然派生类中包含基类成员和派生类自己增加的成员,就产生了这两部分成员的关系和访问属性的问题。 在建立派生类的时候,并不是简单地把基类的私有成员直接作为派生类的私有成员,把基类的公用成员直接作为派生类的公用成员。 对基类成员和派生类自己增加的成员是按不同的原则处理的。;(1) 基类的成员函数访问基类成员? (2) 派生类的成员函数访问派生类自己增加的成员? (3) 基类的成员函数访问派生类的成员? (4) 派生类的成员函数访问基类的成员? (5) 在派生类外访问派生类的成员? (6) 在派生类外访问基类的成员?;继承成员的访问控制规则 ;类定义中的“访问控制”的含义;;公有继承;;;保护成员;保护继承;*;*;私有继承;*;*;*;*;*;派生类的构造函数 ;;;;;;;*;*;;*;*;练习;;赋值兼容原则;;;*;*;*;;多态性;多态性;*;*;*;什么是虚函数 ;*;*;*;;;虚析构函数 #includeiostream using namespace std; class A { public: A(){cout“Constructing Aendl;} virtual ~A(){coutDestructing Aendl;} }; class B:public A { public: B(){cout“Constructing Bendl;} ~B(){coutDestructing Bendl;} }; ;;*;*;*;;*;多重继承;*;*;多重继承派生类的构造函数;*;多重继承派生类的构造函数;多重继承派生类的析构函数;*;;;;C++关于重复继承的基本规则 (1)一个类必须完全定义后才可以作为基类--无法直接或间接让一个类继承自己(不能递归) (2)不允许

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档