0
用於在面嚮對象語言中實現動態綁定的兩種方式是什麼?比如像Smalltalk這樣的純OOL如何實現動態綁定而不是C++混合OOL如 ?面嚮對象語言的動態綁定實現
用於在面嚮對象語言中實現動態綁定的兩種方式是什麼?比如像Smalltalk這樣的純OOL如何實現動態綁定而不是C++混合OOL如 ?面嚮對象語言的動態綁定實現
我不知道是否有兩種方法,我不知道它是純粹的還是混合的OO語言。基本上,C++使用虛表分派 - 每個實例都攜帶一個函數表(在C++的情況下,它攜帶一個指向表的指針,但不在調度機制中扮演任何角色),當你調用x.my_method()
,編譯器知道它的例如。對象的第二種方法,因此它會發出代碼以跳轉到虛擬方法表中的第二個指針。
在動態語言(和ObjC)中,通常通過在某個地方使用方法字典來解決,其中在運行時,名稱my_method
被查找,並執行任何函數。
有混合的方法 - 在COM中,你通過標識符來查看接口;然後你從它的vtable執行一個方法。
有時會生成類似於某些switch語句(例如,根據對象類型切換)的代碼,以加速第二種方法。