欢迎来到天天文库
浏览记录
ID:58988497
大小:397.50 KB
页数:38页
时间:2020-09-27
《面向对象语言的编译ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、面向对象语言的编译本章内容概述面向对象语言的重要概念和实现技术以C++语言为例,介绍如何将C++程序翻译成C程序实际的编译器大都把C++程序直接翻译成低级语言程序112.1面向对象语言的概念12.1.1对象和对象类对象由一组属性和操作于这组属性的过程组成属性到值的映射称为对象的状态,过程称为方法对象类一类对象的总称,规范了该类中对象的属性和方法,包括它们的类型和原型对象有自己存放属性的存储单元;同一个类的对象可以共享方法的代码对象类形成了面向对象语言的模块单元下面将把术语“类”和“类型”看成是同义的21
2、2.1面向对象语言的概念12.1.2继承图形对象的继承层次结构GraphicalObjtranslatescalePolyLinetranslatescalelengthClosedGraphicsareaEllipsetranslatescaleareaPolyGonareaRectangleareaTriangle………………312.1面向对象语言的概念继承基类、派生类、子类、抽象类子类型规则当某个类型的一个对象在某个输入位置被需要或作为函数的返回值时,其任何子类型的对象允许出现在这些地方类B的一个
3、对象,若它不同时是B的某个真子类的对象,那么称该对象是B的真对象,称B是该对象的运行时类型412.1面向对象语言的概念12.1.2继承图形对象的继承层次结构GraphicalObjtranslatescalePolyLinetranslatescalelengthClosedGraphicsareaEllipsetranslatescaleareaPolyGonareaRectangleareaTriangle………………B512.1面向对象语言的概念方法选择规则如果类B继承类A并且重写了方法m,那么对
4、类B的对象b来说,即使它作为类A的对象使用,也必须使用在类B中定义的方法m612.1面向对象语言的概念12.1.2继承图形对象的继承层次结构GraphicalObjtranslatescalePolyLinetranslatescalelengthClosedGraphicsareaEllipsetranslatescaleareaPolyGonareaRectangleareaTriangle………………BA712.1面向对象语言的概念动态绑定规则当对象o的一个方法可能被子类重新定义时,如果编译器不能
5、确定o的运行时类型,那么必须对该方法进行动态绑定voidzoom(GraphicalObj&obj,doublezoom_factor,Point¢er){obj.translate(center.x,center.y);//将“中心”移至“点(0,0)”obj.scale(zoom_factor);//缩放}812.1面向对象语言的概念12.1.3信息封装大多数面向对象语言提供了一种机制,它可用来将类的特征分成私有的和公共的某些面向对象语言用不同的上下文区分作用域,如“在一个类中”、“在派
6、生类中”、“在友元类中”等等由编译器来实现这些作用域规则是简单而又明显的912.2方法的编译先定义一般的图形对象类GraphicalObj如下:classGraphicalObj{virtualvoidtranslate(doublex_offset,doubley_offset);virtualvoidscale(doublefactor);...//可能还有一些其它方法};1012.2方法的编译classPoint:publicGraphicalObj{doublexc,yc;public:void
7、translate(doublex_offset,doubley_offset){xc+=x_offset;yc+=y_offset;}voidscale(doublefactor){xc*=factor;yc*=factor;}Point(doublex0=0,doubley0=0){xc=x0;yc=y0;}voidset(doublex0,doubley0){xc=x0;yc=y0;}doublex(void){returnxc;}doubley(void){returnyc;}doubledis
8、t(Point&);};1112.2方法的编译将一个C++语言的类翻译成C语言的程序段,主要工作有如下几点(由继承引出的问题暂不考虑)将C++语言中一个类的所有非静态属性构成一个C语言的结构体类型,取类的名字作为结构体类型的名字类的静态属性是该类的所有对象所共有的,应当翻译成C中的全局变量,但是需要改一个名字C++语言中类的对象声明不加翻译就成了C语言中相应结构体类型的变量声明1212.2方法的编译将C++语言中类的非静态方法翻译成C语言的
此文档下载收益归作者所有