- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章面向对象语言地编译
中国科大 第十一章 面向对象语言的编译 本章内容 概述面向对象语言的重要概念和实现技术 以C++语言为例,介绍如何将C++程序翻译成C程序 实际的编译器大都把C++程序直接翻译成低级语言程序 11.1 面向对象语言的概念 11.1.1 对象和对象类 对象 由一组属性和操作于这组属性的过程组成 属性到值的映射称为对象的状态 ,过程称为方法 对象类 一类对象的总称,规范了该类中对象的属性和方法,包括它们的类型和原型 对象有自己存放属性的存储单元;对象可以共享方法的代码 对象类形成了面向对象语言的模块单元 下面我们将把术语“类”和“类型”看成是同义的 11.1 面向对象语言的概念 11.1.2 继承 11.1 面向对象语言的概念 继承 基类、派生类、子类、抽象类 子类型规则 当某个类型的一个对象在某个输入位置被需要或作为函数的返回值时,其任何子类型的对象允许出现在这些地方。 类B的一个对象,若它不同时是B的某个真子类的对象,那么我们称该对象是B的真对象,称B是该对象的运行时类型 11.1 面向对象语言的概念 方法选择规则 如果类B继承类A并且重写了方法m,那么对类B的对象b来说,即使它作为类A的对象使用, 也必须使用在类B中定义的方法m 动态绑定规则 当对象o的一个方法可能被子类重新定义时,如果编译器不能确定o的运行时类型,那么我们必须对该方法进行动态绑定 11.1 面向对象语言的概念 11.1.3 信息封装 大多数面向对象语言提供了一种机制,它可用来将类的特征分成私有的和公共的 某些面向对象语言用不同的上下文区分作用域,如“在一个类中”、“在派生类中”、“在友元类中”等等 由编译器来实现这些作用域规则是简单而又明显的 11.2 方法的编译 先定义一般的图形对象类GraphicalObj如下: class GraphicalObj { virtual void translate (double x_offset, double y_offset); virtual void scale (double factor); . . . // 可能还有一些其它方法 }; 11.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(double 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 ); }; 11.2 方法的编译 将一个C++语言的类翻译成C语言的程序段,主 要工作有如下几点(由继承引出的问题暂不考虑) 将C++语言中一个类的所有非静态属性构成一个C语言的结构类型,取类的名字作为结构类型的名字 类的静态属性是该类的所有对象所共有的,应当翻译成C中的全局变量,但是需要改一个名字 C++语言中类的对象声明不加翻译就成了C语言中相应结构类型的变量声明 11.2 方法的编译 将C++语言中类的非静态方法翻译成C语言的函数,对应的方法和函数的区别有下面几点: 函数的名字必须在原来方法名的基础上修改 函数声明增加一个形参this 在函数体中出现的函数调用也要增加一个实参 在方法中对本对象的非静态属性的访问,改成对this相应域的访问。在方法中对其它对象的非静态属性的访问不必修改 类的静态方法在定义和调用时,需要改名 11.2 方法的编译 11.2 方法的编译 类Point的方法translate翻译成函数 translate_ _5Pointdd void translate_ _5Pointdd(Point this, double x_offset , double y_offset) { this.xc += x_offset; this.yc += y _offset; } 11.3 继承的编译方案 如果类B直接或间接继承类A,类B的对象可以用在几乎所有类A的对象可用的地方。 为了使类B的对象可以作为类A的对象使用,编译器必须能以一种有效的方式产生
您可能关注的文档
最近下载
- 电动叉车安全风险点告知牌.docx VIP
- AQL抽样标准培训.pptx VIP
- 2025广东中山市东凤镇污水处理有限责任公司管网维护人员招聘6人笔试模拟试题及答案解析.docx VIP
- 家具设计与工艺ppt-板式家具结构与生产工艺.pdf VIP
- 2025河北建材职业技术学院招聘106人笔试参考题库附答案解析.docx VIP
- 部编版语文四年级下册第四单元大单元教学设计核心素养目标.pdf VIP
- 初中数学常用二级结论知识点总结.doc VIP
- 我的师德小故事 .docx VIP
- 主要股东或出资人信息及投标人基本情况表模板.docx VIP
- 新型独脚金内酯类似物的结构设计、合成及对水稻生长调控的多维度探究.docx
文档评论(0)