面向对象语言的编译课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向对象语言的编译课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 语言 编译 课件
- 资源描述:
-
1、第十二章第十二章 面向对象语言的编译面向对象语言的编译本章内容本章内容 概述面向对象语言的重要概念和实现技术概述面向对象语言的重要概念和实现技术 以以C+语言为例,介绍如何将语言为例,介绍如何将C+程序翻译程序翻译成成C程序程序 实际的编译器大都把实际的编译器大都把C+程序直接翻译成低程序直接翻译成低级语言程序级语言程序12.1 面向对象语言的概念面向对象语言的概念12.1.1 对象和对象类对象和对象类 对象对象 由一组属性和操作于这组属性的过程组成由一组属性和操作于这组属性的过程组成 属性到值的映射称为对象的状态,过程称为方法属性到值的映射称为对象的状态,过程称为方法 对象类对象类 一类对象
2、的总称,规范了该类中对象的属性和方一类对象的总称,规范了该类中对象的属性和方法,包括它们的类型和原型法,包括它们的类型和原型 对象有自己存放属性的存储单元;同一个类的对对象有自己存放属性的存储单元;同一个类的对象可以共享方法的代码象可以共享方法的代码 对象类形成了面向对象语言的模块单元对象类形成了面向对象语言的模块单元 下面将把术语下面将把术语“类类”和和“类型类型”看成是同义的看成是同义的12.1 面向对象语言的概念面向对象语言的概念12.1.2 继承继承图形对象的继承层次结构图形对象的继承层次结构GraphicalObj translate scale PolyLine translate
3、 scale lengthClosedGraphics area Ellipse translate scale areaPolyGon areaRectanglearea Triangle 12.1 面向对象语言的概念面向对象语言的概念继承继承 基类、派生类、子类、抽象类基类、派生类、子类、抽象类 子类型规则子类型规则当某个类型的一个对象在某个输入位置被需要或作当某个类型的一个对象在某个输入位置被需要或作为函数的返回值时,其任何子类型的对象允许出现为函数的返回值时,其任何子类型的对象允许出现在这些地方在这些地方 类类B的一个对象,若它不同时是的一个对象,若它不同时是B的某个真子的某个真子类的
4、对象,那么称该对象是类的对象,那么称该对象是B的的真对象真对象,称,称B是该对象的是该对象的运行时类型运行时类型12.1 面向对象语言的概念面向对象语言的概念12.1.2 继承继承图形对象的继承层次结构图形对象的继承层次结构GraphicalObj translate scale PolyLine translate scale lengthClosedGraphics area Ellipse translate scale areaPolyGon areaRectanglearea Triangle B12.1 面向对象语言的概念面向对象语言的概念 方法选择规则方法选择规则如果类如果类B继
5、承类继承类A并且重写了方法并且重写了方法m,那么对那么对类类B的对象的对象b来说来说,即使它作为类即使它作为类A的对象使用的对象使用,也必须使用在类也必须使用在类B中定义的方法中定义的方法m12.1 面向对象语言的概念面向对象语言的概念12.1.2 继承继承图形对象的继承层次结构图形对象的继承层次结构GraphicalObj translate scale PolyLine translate scale lengthClosedGraphics area Ellipse translate scale areaPolyGon areaRectanglearea Triangle BA12.1
6、 面向对象语言的概念面向对象语言的概念 动态绑定规则动态绑定规则当对象当对象o的一个方法可能被子类重新定义时,的一个方法可能被子类重新定义时,如果编译器不能确定如果编译器不能确定o的运行时类型,那么必的运行时类型,那么必须对该方法进行动态绑定须对该方法进行动态绑定void zoom(GraphicalObj&obj,double zoom_factor,Point¢er)obj.translate(center.x,center.y);/将将“中心中心”移至移至“点点(0,0)”obj.scale(zoom_factor);/缩放缩放12.1 面向对象语言的概念面向对象语言的概念12.
7、1.3 信息封装信息封装 大多数面向对象语言提供了一种机制,它可大多数面向对象语言提供了一种机制,它可用来将类的特征分成私有的和公共的用来将类的特征分成私有的和公共的 某些面向对象语言用不同的上下文区分作用某些面向对象语言用不同的上下文区分作用域,如域,如“在一个类中在一个类中”、“在派生类中在派生类中”、“在友元类中在友元类中”等等等等 由编译器来实现这些作用域规则是简单而又由编译器来实现这些作用域规则是简单而又明显明显的的 12.2 方法的编译方法的编译 先定义一般的图形对象类先定义一般的图形对象类GraphicalObj如下如下:class GraphicalObj virtual vo
8、id translate(double x_offset,double y_offset);virtual void scale(double factor);./可能还有一些其它方法可能还有一些其它方法;12.2 方法的编译方法的编译 class Point:public GraphicalObj double xc,yc;public:void translate(double x_offset,double y_offset)xc+=x_offset;yc+=y_offset;void scale(double factor)xc*=factor;yc*=factor;Point(dou
9、ble x0=0,double y0=0)xc=x0;yc=y0;void set(double x0,double y0)xc=x0;yc=y0;double x(void)return xc;double y(void)return yc;double dist(Point&);12.2 方法的编译方法的编译 将一个将一个C+语言的类翻译成语言的类翻译成C语言的程序段,主语言的程序段,主要工作有如下几点要工作有如下几点(由继承引出的问题暂不考虑由继承引出的问题暂不考虑)将将C+语言中一个类的所有非静态属性构成一语言中一个类的所有非静态属性构成一个个C语言的结构体类型,取类的名字作为结构语言
10、的结构体类型,取类的名字作为结构体类型的名字体类型的名字 类的静态属性是该类的所有对象所共有的类的静态属性是该类的所有对象所共有的,应应当翻译成当翻译成C中的全局变量,但是需要改一个名中的全局变量,但是需要改一个名字字 C+语言中类的对象声明不加翻译就成了语言中类的对象声明不加翻译就成了C语语言中相应结构体类型的变量声明言中相应结构体类型的变量声明12.2 方法的编译方法的编译 将将C+语言中类的非静态方法翻译成语言中类的非静态方法翻译成C语言的语言的函数,对应的方法和函数的区别有下面几点:函数,对应的方法和函数的区别有下面几点:函数的名字必须在原来方法名的基础上修改函数的名字必须在原来方法名
11、的基础上修改 函数声明增加一个形参函数声明增加一个形参this 在函数体中出现的函数调用也要增加一个实参在函数体中出现的函数调用也要增加一个实参 在方法中对本对象的非静态属性的访问,改成对在方法中对本对象的非静态属性的访问,改成对this相应域的访问。在方法中对其它对象的非静态相应域的访问。在方法中对其它对象的非静态属性的访问不必修改属性的访问不必修改 类的静态方法在定义和调用的地方都需要改名类的静态方法在定义和调用的地方都需要改名12.2 方法的编译方法的编译 方方 法法 函函 数数 原型原型 返回类型返回类型 m(形参表形参表)返回类型返回类型 fm(C&this,形参表形参表)调用调用
12、m(实参表)实参表)o.n(实参表)实参表)fm(this,实参表)实参表)fn(o,实参表)实参表)属性访问属性访问 ko.kthis.ko.k类类C的方法的方法m被翻译成函数被翻译成函数fm 12.2 方法的编译方法的编译 类类Point的方法的方法translate翻译成函数翻译成函数translate_ _5Pointddvoid translate_ _5Pointdd(Point this,double x_offset,double y_offset)this.xc+=x_offset;this.yc+=y _offset;12.3 继承的编译方案继承的编译方案图形对象的继承层次
13、结构图形对象的继承层次结构GraphicalObj translate scale PolyLine translate scale lengthClosedGraphics area Ellipse translate scale areaPolyGon areaRectanglearea Triangle BA12.3 继承的编译方案继承的编译方案图形对象的继承层次结构图形对象的继承层次结构GraphicalObj translate scale PolyLine translate scale lengthClosedGraphics area Ellipse translate sca
展开阅读全文