用于在OO语言中实现动态绑定的两种方法有哪些。就像为Smalltalk这样的纯OOL而不是混合OOL实现动态绑定一样 作为C ++?
答案 0 :(得分:1)
我不知道是否有两种方式,我不知道它是纯粹的混合OO语言。
基本上,C ++使用虚拟表分派 - 每个实例都带有一个函数表(在C ++的情况下,它带有指向表的指针,但在调度机制中没有任何作用),当你调用时x.my_method()
,编译器知道它的例子。对象的第二种方法,因此它会发出代码以跳转到虚方法表中的第二个指针。
在动态语言(和ObjC)中,它通常通过在某处使用方法字典来解决,在运行时,查找名称my_method
并执行任何函数。
有混合的方法 - 在COM中,你通过标识符查找界面;然后从vtable执行一个方法。
有时会生成类似某些switch语句的代码(例如,切换取决于对象的类型)以加快第二种方法。