面向对象语言的编译=====

面向对象语言的编译:












1.对象有自己的存放属性的存储单元,同一类的对象可以共享方法的代码。
2.如果类B继承类A并且重写了方法m,那么对类B的对象b来说,即使他作为类A的对象使用也必须使用在类B中定义的方法。
3.动态绑定规则:
当对象0的一个方法可能被子类重新定义时,如果编译器不能确定0的运行时类型,那么必须对该方法进行动态绑定。
4.如果将C++语言的类翻译成C语言:
将一个C++语言的类翻译成C语言的程序段,主要工作有如下几点
().将C++语言中的一个类的所有非静态属性构成一个C语言的结构体类型,取类名作为结构体类型的名字。
().类的静态属性是该类的所有对象所共有的,应该翻译成C总中的全局变量,但需要改一个名字。
()。C++的对象声明即:C的对象声明。


().将C++中类的非静态方法翻译成C语言的函数,对应的方法和函数的区别有以下几点:
   ().函数的名字必须在原来方法名的基础上修改。
   ().函数声明增加一个形参this
    ().在函数体中出现的函数调用也要增加一个实参。
().在方法中对本对象的非静态属性的访问,改成对this相应域的访问。
类的静态方法在定义和调用的地方都需要改名。


方法的编译:
一个方法的编译类似于函数,它被转变成驻留在指令空间中特定地址的机器码。

































编译器怎样有效的实现动态绑定??
().编译器为每一类建立一个方法表,它们包含该类或它的超类中所有定义为virtual的方法的入口。
().每个对象在C程序中有相应的结构体,再为这中结构体增加一个域,该域就是方法表的指针。
().继承类方法表的产生:
首先拷贝基类的方法表,被重新定义的方法由新的定义覆盖。
然后把新引入的方法追加到这张表上。
 
 
 
 







面向对象语言的编译是如何处理 多态的???
::
::::
什么是多态???
:对象根据所接收的消息而做出动作,
同一消息为不同的对象接收时可产生完全不同的动作,这种现象称为:多态性。




用户利用多态性可发送一个通用的消息,而将所有的实现细节都留给接收消息的对象自行决定,如是,同一消息即可调用不同的方法。


多态性的实现受到继承性的支持。
利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,
而将实现这一功能的不同方法置于较低层次,这样,在这些较低层次上生成的对象就能给通用的消息以不同的响应。




在OOPL中可通过在派生类中重定义基类函数(定义为:重载函数或虚函数)
来实现多态性。




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值