- 5
- 0
- 约3.38千字
- 约 20页
- 2017-09-22 发布于广东
- 举报
序 面向对象语言通过将数据和作用其上的操作封装成一种新的数据类型,实现了很好的数据抽象性 通过继承和组合能够方便的实现模块的可重用性和可扩充性 本章我们概述面向对象语言的重要概念和实现它们的方法 面向对象语言的概念 对象 类 继承性 -对象 一个对象由它的状态和操作于该状态的过程组成,状态由一组属性的值表示,过程也叫做方法或行为。 属性和方法共同形成了对象的特征。 对象封装了数据及其上的操作,它是一个独立的有约束的实体,有自己的记忆和活动。 -类 用户可以将一些属性和方法封装在自定义的类型中,这种类型就称为类。一个类规范了类中对象的属性和方法,一个对象要想属于一个类,它必须至少应该包含该类所具有的特征,当然还可以含有其它一些特征。 -继承: -多态 多态是指基类的方法调用可以根据实际运行的对象类型不同实现对不同函数体的调用。 考虑类间的层次关系,解决功能和行为的再抽象。 单继承的编译方案 子类中属性的偏移值应该如何定? 对于单继承,即每个派生类只有一个父类的情况,采用最简单的“前置”技术就能解决上面的问题。 例如当B从A派生而来时,那些从A继承来的属性被置于B的属性域的最开始,并和它们在A中出现的顺序是相同的。那些从B派生的属性被放在后面, 单继承的编译方案 方法的编译同普通函数的编译很相似: 它被编译变换成机器代码存于指令空间的一个特定地址中。 在编译的语义分析阶段,每一个变量的环境域会包含一个指针指向它的类描述符;每个类描述符又包含一个指向它父类的指针和自身的方法实例列表;每个方法实例又包含一个对应的机器指令级的标号。 §静态方法 静态方法是指在编译时就可以确定下来执行函数体的方法。 在c++中没有特殊标明的方法都属于此类。例如下面的c++程序: class A{int x; void f();} class B:public A{ void g();} class C:public B{ void g();} class D:public C{int y; void f();} 该程序中所有的方法都是静态方法。 当我们调用一个方法c.f()时,编译出的机器代码是依据变量c的类型来定的,而不是依据c所指向的对象类型来定的,这样静态方法对应的执行函数体就可以在编译时确定下来。 为了编译类似于c.f()的方法调用,编译器首先要找到c所对应的类描述符,假设为C;接着要在C中查找方法f,假设没有找到; 然后编译器再查找C的父类B,然后在B中寻找方法f,以此类推。 假设最后在某个祖先类A中找到了静态方法f,这时编译器就可以将c.f()这个调用编译为机器标号A_f。 §动态方法 动态方法是指在编译时无法确定下来执行函数体,要到运行时根据变量指向的实际类型来确定的方法。 在c++中用带有virtual关键字的虚函数来表示。 与静态方法相反,编译出的机器代码不是依据变量的类型来定而是依据变量所指向的对象类型来定的。 对于前面的例子,类A中的方法f是一个动态方法,它在类C的子类D中被覆盖。这样当我们同样调用c.f()时,我们没有办法在编译时确定变量c指向的类型是D还是C,因而也就无法确定应该编译成机器标号D_f,还是A_f。 动态方法表(也称为虚函数表) £ 为解决动态方法在编译时无法确定应该编译成的机器标号,引 入了动态方法表,该表记录了每个动态方法对应的机器标号。 £ 当类B从类A派生出来以后,它的动态方法表首先包含A中已有的 方法,然后才是自己新增的动态方法。 根据上面属性和方法的编译方案,下面程序对应的对象实例如右图所示: 多继承的编译方案 与多继承性有关的所有问题和可能的解决办法都可以通过双继承性来阐明。 多继承性引入了许多单继承性不存在的问题,主要包括命名冲突和重复继承。1)命名冲突:当基类B1和B2包含相同的方法名或属性名时,类C从B1和B2派生时就会引起冲突2)重复继承:例如在图10.8中,若B1和B2都直接从类A继承,那么C将从A重复继承,也就是说C中将包含两份A的实例。 对于问题(1),它是一个语言定义的问题,与编译实现关系不大。 对于问题(2),会有两种实现,一种是允许多个基类的实例,一种是只允许一个基类的实例。 私有属性和方法的编译 ●真正的面向对象语言能够为对象的属性提供保护,防止其它对象的方法直接操作它们。 ?私有属性是指禁止从不属于该对象的函数中读取或访问的属性; ?私有方法是指不能从对象外部调用的方法。 ●不同的语言允许不同的私有性和保护,包括: ?属性和方法只能从声明它们的类中访问。 ?属性和方法只能从声明它们的类和该类的任何子类中访问。
您可能关注的文档
- DA & AD转换器及其与单片机接口.ppt
- Delphi_数据库程序设计.ppt
- e01.Introduction绪论.ppt
- e03.Connective tissue结缔组织.ppt
- e04.Cartilage & Bone软骨和骨.ppt
- e05.Blood and Hemopoiesis血液淋巴和血发生.ppt
- e06.Muscular Tissue肌组织.ppt
- e09.Circulat0ry system循环系统.ppt
- e10.Immune system免疫系统.ppt
- e11.Skin皮肤.ppt
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
最近下载
- 中医护理技术在骨科中的应用.ppt VIP
- 非煤矿山节后复工安全培训.pptx VIP
- 吉林省松原市长岭县2025~2026学年度下学期第一次月考试卷 八年英语(含答题卡、答案).docx VIP
- 2019新人教版高中英语必修二Unit4词汇表.pdf VIP
- 2025年上半年中国铁路西安局集团有限公司校招笔试题带答案.docx VIP
- 教育学原理-第三章-教育与人的发展【实用参考】.ppt VIP
- 婴幼儿早期教育课程标准.docx VIP
- 景成道人培训课件.ppt VIP
- 2022年高中军训心得体会(集合15篇).docx VIP
- (统编版2024)语文七年级下册 第三单元《课外古诗词诵读》课件(新教材).pptx
原创力文档

文档评论(0)