全国计算机软考软件设计师考前练习及答案(10)
上学吧(www.shangxueba.com)
从另一角度看,继承和封装机制还具有一定的相似性,它们都是一种共享代码的手段。继承
是一种静态共享代码的手段,通过派生类对象的创建,可以接受某一消息启动其基类所定义的代码段,从而使基类和派生类共享了这一段代码。而封装机制所提供的是一种动态共享代码的手段,通过封装,我们可将一段代码定义在一个类中,在另一个类所定义的操作中,我们可以通过创建该类的实例,并向它发送消息而启动这一段代码,同样也达到了共享的目的。
3.2.4 继承与委托的关系
委托是面向对象设计中经常使用的一种方法。在面向对象系统中,每个操作元素都是一个对象,为了减少一个操作的实现代码,我们尽量使用向其它对象发送消息而不再重写代码,这就是委托的意义。这意味着在定义一个对象的操作时,要委托该操作所涉及的其它对象完成部分操作来实现。
继承和委托的相同点是,都具有节省代码的作用,继承定义的类可有继承其它类的能力;委托则是一个对象可以依赖其它对象为它完成某些操作。
但继承和委托又是性质不同的两种关系。继承是静态关系,在程序描述时建立,它的基本功能是将一些功能相关的对象进行特定归类表示,使得特殊类别的对象有继承较为一般类别对象的能力;而委托则是一种既可以静态定义也可以动态定义的更复杂的关系,它的基本功能是将一个对象的工作分配到与之相关的更特殊的对象上。
3.2.5 类的层次
在前面已经介绍了继承的概念,当一个类B从类A中派生出来,B类继承了A类的部分或全部属性,B类作为一个派生类,它又可以再派生新类,这样我们可以从某一个类派生出所需的任意多的类,这就形成了类的层次。 下面是C++语言中派生类的定义: class A{ // … };
class B : public A{ // … };
class C : publicB{ // … };
类B是从类A中派生出来的,也就是说A是B的基类,而且是直接基类,B是A的派生类;类C是从类B中派生出来的,也就是说B是C的直接基类,C是B的派生类。对于C类来讲,除去B是它的直接基类外,A也是它的基类,但是是间接基类。由此,A,B,C这三个类之间的继承关系就形成了一个类的层次。
类的层次关系可以清楚有效地表示现实世界中事物的分类问题。
3.2.6 单继承与多继承
根据我们已经介绍的继承的概念和类的层次,如图3.1所示即为类间的单继承关系。 从图中我们可以看出,B类和C类是A类的派生类,A类是B类和C类的基类;D类和E类是B类的派生类,B类是D类和E类的基类。由A,B,C,D,E所组成的是一种单继承的派生形式,即每个派生类只是继承了一个基类的特性。
使用单继承可以解决很多问题,但在不少场合,需要不同形式的继承才能解决问题,单继承就似乎显得无能为力了。例如,在基于位映象的显示器上,用户界面所提供的窗口、滚动条、尺寸框以及多种类型的按钮,假定所有这些都是通过类来支持的,假如要把所有这些类型合
第 46 页,共 64页
上学吧为您提供“软件设计师”资料下载:http://www.shangxueba.com/share/e15.html
上学吧(www.shangxueba.com)
并成一个新类型,这样,多继承的概念就产生了,所谓多继承就是在派生类中继承了不止一
个基类的属性。
D类是A类和B类的派生类,A类和B类均是D类的直接基类。E类是B类和C类的派生类,B类和C类均是E类的直接基类,F类是D类、E类和C类的派生类,D类、C类和E类均是F类的直接基类。A,B,C,D,E和F类形成了一个多继承的类层次。 多重继承的引入,使面向对象系统大大增加了模拟世界的能力。
3.2.7 面向对象系统的继承性
在面向对象系统中,引入继承机制后具有如下优点: ①能清晰体现相关类间的层次结构关系。
②能减小代码和数据的重复冗余度,大大增加程序的重用性。
③能通过增强一致性来减少模块间的接口和界面,大大增加程序的易维护性。 ④继承是能自动传播代码的有力工具。
⑤继承还是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。 在面向对象系统中,若没有引入继承的概念,所有的类就会变为一盘各自为政、彼此独立的散沙,每次软件开发就都要从“一无所有”开始。
在面向对象系统中,继承性不仅作用在对操作的继承,还作用在对数据内容的继承,即既具有结构特性的继承性,又具有行为特性的继承性。
在面向对象系统中,派生类是否可以访问基类的所有数据成员和函数成员呢?我们以C++为例来说明,在C++语言中,类的定义域分为三段:即私有段(private)、保护段
(protected)和公有段(public)。基类的成员若处在保护段和公有段中,派生类是可以访问的;若基类的成员处在私有段中,派生类是无权访问的。
3.3 多 态 性
多态性是面向对象系统中的又一重要特性,它描述的是同一个消息可以根据发送消息对象的不同采用多种不同的行为方式。
3.3.1 重载的概念 在面向对象系统中,重载的含义是指通过为函数和运算符创建附加定义而使它们的名字可以重载。也就是说相同名字的函数或运算符在不同的场合可以表现出不同的行为。 下面是一个C++语言中函数重载的例子: class number{ int i; float x; char s1; public:
int max(int a)(return a>i? a : i;)
float max(float b)(return b>x ? b: x;) char *max(char *c)
{ return strcmp(c,s1)>0 ? c : s1; } // … };
在这里重载了三个函数,均为max,它们的功能为将函数的参数分别与类中各私有数据比较大小。函数名相同,它们的差别在于函数参数的类型不同。
当有求最大值的消息发送时,到底是执行这三个函数中的哪一个,也就是说到底要表现出什么样的行为,这要看发送消息的对象是什么。通俗地讲在这里要看传递的函数参量是什么,根据参量来调用不同的同名函数,假如发送的消息为max(10),则执行第一个max函数,因
第 47 页,共 64页
上学吧为您提供“软件设计师”资料下载:http://www.shangxueba.com/share/e15.html
上学吧(www.shangxueba.com)
为其参量为整型的。
在定义函数重载时,函数名相同,但函数所带的参量的个数或类型必须有所区别,否则就会出现二义性。
在面向对象系统中除函数可以重载外,运算符也可以重载。
3.3.2 虚函数的概念
虚函数使用户在一个类等级中可以使用相同函数的多个版本,每一个版本均属于类等级中的不同的类,究竟使用的是哪一个特定的版本需要在运行中决定。
在C++语言中,虚函数在定义时,要在基类的此函数声明前加上关键字virtual,在派生类中可重新给出定义。虚函数的各个版本中,其返回值、函数参数的个数和类型必须是一致的。至于在程序执行过程中究竟运行的是基类的版本,还是某个派生类的版本,这要看当时发送此消息的对象是属于 …… 此处隐藏:6528字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




