2009-04-20 40 views

回答

1

我不知道是否有兩種方法,我不知道它是純粹的還是混合的OO語言。基本上,C++使用虛表分派 - 每個實例都攜帶一個函數表(在C++的情況下,它攜帶一個指向表的指針,但不在調度機制中扮演任何角色),當你調用x.my_method(),編譯器知道它的例如。對象的第二種方法,因此它會發出代碼以跳轉到虛擬方法表中的第二個指針。

在動態語言(和ObjC)中,通常通過在某個地方使用方法字典來解決,其中在運行時,名稱my_method被查找,並執行任何函數。

有混合的方法 - 在COM中,你通過標識符來查看接口;然後你從它的vtable執行一個方法。

有時會生成類似於某些switch語句(例如,根據對象類型切換)的代碼,以加速第二種方法。