编译器的设计与实现ppt课件3类与对象

编译器的设计与实现ppt课件3类与对象

ID:33998380

大小:131.50 KB

页数:45页

时间:2019-03-03

编译器的设计与实现ppt课件3类与对象_第1页
编译器的设计与实现ppt课件3类与对象_第2页
编译器的设计与实现ppt课件3类与对象_第3页
编译器的设计与实现ppt课件3类与对象_第4页
编译器的设计与实现ppt课件3类与对象_第5页
资源描述:

《编译器的设计与实现ppt课件3类与对象》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译器的设计与实现制作:张云时间:2008-03课程描述目标:编译器的设计与实现方法:给定语言特性,限定目标机器模型,实现该语言的编译器;添加新的语言特性,对编译器做相应的修改。语言一个用于教学的编译运行环境简化的C函数调用If语句While语句赋值语句表达式数组声明语句控制语句…进一步的扩展简化的C++简单的C对象继承多态异常处理垃圾回收……加入对象目标:在简化的C的基础上增加对象的支持。问题:什么是对象?对一个程序员来说,对象就是一个带有相关语义学的存储区域。(C++FAQ)加入对象要解决的问题1要处理什么样的对象?2对象数据存放在何处?(对象模型的建立)3对象支持哪些

2、操作?4实现1处理什么样的对象定义对象:将数据和操作封装在一起没有继承没有多态没有指针,完全为引用(为了实现简单)2对象数据应该存放在何处方法一:类似于程序中局部变量全局变量的存储,将对象的数据存放在栈或静态存储区域中。方法二:在堆上动态创建对象比较对象数据应该存放在何处我们采用的方法:参照.Net的设计,对象都分配在堆上,仅仅声明并不创建对象;当使用了new命令才构造对象。Pointp;//对象声明P=newPoint();//对象的创建类声明:classPoint{intx;inty;intz;voidInit(inta,intb,intc){x=a;y=b;z=c;}

3、}类使用:voidmain(){Pointp;p=newPoint();p.Init(3,2,3);p.z=6;p.z=p.x+p.y;}示例堆对象模型p是Point类的一个对象xyzPoint::Init()运行栈p引用地址对象地址3对象支持什么样的操作?对象操作对象创建调用成员函数访问成员变量运行栈3.1对象创建classPointp;//声明在函数中声明一个对象与声明变量没有不同!=>在函数栈中添加一个空间用来记录对象的”值”p=newPoint();//创建对象,在堆上分配空间对象封装了成员变量与成员函数为对象赋值就是为对象的成员变量赋值堆X随机值Y随机值Z随机值p

4、3.2成员变量访问p.x=1;根据bp指针找到p,然后找到对象的成员变量的地址运行栈堆X1Y随机值Z随机值pbp3.3成员函数调用ClassPoint{……voidInit(){x=a;y=b;z=c;}}voidPoint.Init(Pointthis){this.x=a;this.y=b;this.z=c;}编译器将成员函数转换成对等的非成员函数;如何实现?成员函数的运行栈VoidPoint::f1(inta,intb){。。。}VoidMain(){Pointp;p.f1(1,3);}Main的运行栈31参数个数=3返回地址main.bpbpspf1()local对象

5、p堆XYZthis指针4如何实现?问题:对象在操作过程中所需要的信息从哪里获得?类的定义对象声明对象的创建对象的操作如何实现?类定义类信息类成员函数汇编代码对象操作类名成员函数列表成员变量列表需要的内存空间4.1中间形式PointxyzInit类声明classPoint{intx;inty;intz;voidInit(inta,intb,intc){x=a;y=b;z=c;}}abc语句cls-declaration→classID{var-declaration

6、fun-declaration}类成员变量声明类定义节点类成员函数类使用:voidmain(){Pointp;

7、p=newPoint();p.Init(3,2,3);p.z=6;p.z=p.x+p.y;}mainp=pnull=pnewPoint()P.z6Init323var→ID

8、ID.ID

9、this.IDvar=newID(args)call→ID(args)

10、ID.ID(args)成员函数调用节点nullABC4.2符号表类名Point成员函数列表成员变量列表Init参数列表局部变量列表…其它成员函数xint偏移0yint偏移1zint偏移24.3目标代码生成对象操作对象创建调用成员函数访问成员变量在堆上分配空间产生对象地址需要this指针关联到对象需要对象地址作为变量偏移基

11、准对象声明类似于普通变量声明4.3.1对象创建实现为对象在堆中分配空间目标机器指令系统中增加了new指令主要完成在堆上按照对象的需要分配空间的工作P=newPoint();生成代码NEWp引用地址,PointNEWpPoint=4.3.2成员函数的调用成员函数调用分两种情况:在类定义外部调用成员函数在成员函数内部调用其它的成员函数在类定义外部调用成员函数Pointp;p=newPoint();p.Init();等价于Point_Init(p);生成代码如下:…;函数参数入栈Movax,[bp+3]Pushax;对象

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。