[法学]第三章 继承.ppt_第1页
[法学]第三章 继承.ppt_第2页
[法学]第三章 继承.ppt_第3页
[法学]第三章 继承.ppt_第4页
[法学]第三章 继承.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,主题,对象的关系 聚合(aggregation)、组合、聚集 继承(inheritance),2,对象的关系,现实中,对象都不是孤立存在的,总是有很多对象相互联系,相互配合,共同完成一件事情。 提示:掌握单个对象知识是前提,3,聚合(aggregation),对象包含其它对象从而形成一个大对象,4,继承(inheritance),对象A继承对象B,从而利用对象B的功能或者扩展对象B的功能,5,关系的意义,一个对象不可能完成所有的事情 聚合与继承 对象之间的互相利用以节约成本 代码复用,6,分支主题,代码复用的形式: 1、拷贝、粘贴 2、库函数,7,关于超级素数二,满足下列条件的自然数称为超级素数:该数本身,去掉个位数字后剩下的数,再去掉个位后剩下的数、所有这些数都是素数.求0,999之内: (1)超级素数的个数. (2)所有超级素数之和. (3)最大的超级素数.,8,复制代码,以前做过判断素数的代码,所以把它复制、粘贴过来。,9,复制代码的好处,1、简单而直接 2、减少工作量,节省劳动力。,10,复制代码的坏处,1、别人的代码拿不到 版权 2、大量复制造成代码冗余 重复变量,重复命令到处存在 3、出现错误不好修改 一个地方出错,其它相同的几十个地方都要改,11,库函数,将变量与代码组织成函数形式,通过函数调用达到代码复用的目的。 函数经过证明,在一定条件下一定正确的功能代码集 函数出错时只修改函数,不用修改调用函数的代码 函数集合成一个函数库,可以收取版权费 现代的任何一门语言,都提供了大量的库函数。,12,编程提示,软件开发需要大量的函数库支持 学习一门语言,在掌握基本的语法与语义之后,大量时间都是学习与语言相关的函数库 熟悉掌握的函数库越多,个人能力自然越强,13,小主题,聚合的形式与知识,14,聚合形式一,对象A辅助对象B完成一定的功能,通常对象A都是临时的。 如:Natural对象辅助SuperPrime对象完成判断素数的功能。,15,聚合的形式二,对象A是对象B的组成部分,对象A通常是对象B的成员变量。,16,例子,class Big /大对象 private: Small small; /小对象 public: Big(); Big(); void show(); ;,class Small public: Small(); Small(); void show(); ;,17,问题,Big的对象与Small的对象如何构造?如何销毁?,18,对象的生存,大对象包含小对象,按逻辑,小对象应该先存在(先构造),大对象才能存在(后构造);小对象先消失(先析构),大对象才能消失(后析构),19,多个构造函数,小对象有多个构造函数 大对象也有多个构造函数 提示:需要具有问题具有分析,20,对象间的服务,小对象成为大对象的成员,即大对象的所有成员函数都可以向小对象发出请求,这些请求都是小对象的公共服务,不能是私有服务。,21,小结,对象聚合的关系不是天生的、不是固定的,关系因问题而变化。 分析问题是个人能力问题 逻辑上,对象先存在,后使用。 构造函数表达式提供了控制先后的手段,22,扩展形式:数组或指针,当大对象包含了很多小对象时,我们的选择必然是数组或指针。,23,对象的数组,声明数组会产生多个对象,但是存在一个缺陷:数组不能使用对象的其它构造函数,只能是无参数的构造函数。,24,对象的指针,指针不是对象,它是存放对象地址的位置 new与delete需要配合正确的使用,25,主题,继承的概念 为什么需要继承? 如何定义继承?,26,对象的继承,继承是代码复用的形式之一 拷贝、粘贴 函数库 对象的聚合,27,对象的继承,继承是人认识世界的一种方法 遗产继承 知识传承,28,抽象层次,抽象(abstract):对事物关注关键信息,忽略次要信息的方法; 抽象层次(hierarchy):抽象之间的关系;,29,对象的继承,继承:反映了对象的不同抽象层次; 抽象层次是继承的基础! 抽象是抽象层次的基础! 什么是抽象的基础?,30,问题的抽象,解决问题的需要是抽象的基础; 什么是问题的需要?,31,例子,各位同学:我需要一套单位转换系统,比如: 重量的:Kg、g、lb、gr 压力的:Pa、MPa、psi 其它还有:md、cp,同学A:老师写的这些符号是什么意思? 同学B:没见过,不懂,32,小结,不会抽象,对象技术没用; 没有抽象层次,对象继承没用; 没有问题,只能乱抽象; 有了问题, 看不懂问题(没学过) 抽象错误?正确?(做过之后会知道的),33,C+继承语法,class 子类名称 : public 父类名称 /此内容同普通类 /属性 /方法 ;,34,继承形式,/公有继承 class 子类名称 : public 父类名称 /保护继承 class 子类名称 : private 父类名称 /私有继承 class 子类名称 : protected 父类名称 ,35,C+继承语义,“儿子”可以从“父亲”那儿得到些什么? 1、“父亲”的属性 2、“父亲”的方法 结果: “父亲”可以完成的事情,“儿子”自然也能完成(继承的首要基本原则) “儿子”比“父亲”能力更强(增强父辈的功能),36,主题,继承的语言规则 提示:以下内容与语言相关,与具体问题无关。所以,会写继承的代码 != 会使用继承解决问题。,37,题设,38,题设,A类中聚合(包含)了B类的对象 B类的对象有多种形式,单个对象、数组对象、指针对象 B类与C类形成继承,B类是“父亲”,C类是“儿子”,39,关系一,A类、B类、C类作为三个独立的类 A类、B类、C类不能访问任一方的私有成员 从A类看,因为它包含了B类的对象,所以它可以访问B类对象的公有成员。 从C类看,因为继承,它拥有了B类的公有与保护的成员,40,关系二,由于封装,形成了四个不同的范围,41,继承的访问控制,B类:不能所有东西都留给C类 private的属性和方法C类不能使用 public的属性和方法C类能使用 B类:public的内容C类可以用,A类也可以用。为了让C类能用,A类不能用 protected的属性和方法“儿子”能使用,“外人”不能,42,继承中的构造与析构,构造函数生成对象 析构函数消除对象 在继承方式中,B类与C类的构造函数与析构函数如何处理呢?,43,先说构造语义,构造的目的:类变为一个具体的对象,并封装(隐藏)具体的变化过程 从编程上说:类的属性赋值了 构造的结果:当调用对象的函数时,函数能够正确执行,并返回正确的结果 对象中的属性被正确的赋值了。,44,继承语义,继承使C类可以使用B类的属性与方法 C类如何保证正确使用B类的东西呢? 从编程说,B类必须被正确初始化 Q:C类怎么知道如何正确初始化B类呢? A:既然B类有构造函数,那B类自己做吧,45,小结一,继承中,C类调用B类的构造函数与析构函数,目的是正确初始化B类的属性。 C类会自动调用B类的无参构造函数 如果B类有多个构造函数,C类需要选择性的调用。(通过构造函数表达式),46,深入讨论,继承中的重名问题 如果C类中的成员名称恰好与B类中的成员同名,此时C类隐藏了从B类继承下来的成员 C类可以通过B类的域声明访问继承下来的成员(依然继承了) 外部类(比如A类)则无法访问,47,重名的意义,好处:重名导致隐藏,使得C类有机会去改造B类,外部(如A类)则完全无知。 坏处:B类的对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论