成員函式指標有多型的效果嗎

2022-03-30 22:13:17 字數 781 閱讀 3033

這幾天用bind的時候想到乙個問題,成員函式指標有多型的效果嗎?

我一直以為沒有,測試之後發現是可以的,我對成員函式指標的理解有誤

虛成員函式指標的呼叫過程是先呼叫函式vcall,vcall根據this定址虛函式表然後去呼叫實際的函式,對於虛表上的每個索引x的函式都是使用vcall進行呼叫

所以同一虛函式的父類和基類的成員函式指標的值是一樣的,他們都指向vall

所以成員函式指標是能夠實現多型的

我在裡面關於成員函式指標的部分寫的有點問題

注意:這裡說的是成員函式指標的呼叫過程,跟直接呼叫class.foo() 或者pclass->foo()是不一樣的

呼叫過程:

虛成員函式呼叫:

(pa->*ff1)();

013117fe mov esi,esp

01311800 mov ecx,dword ptr [ebp-44h]

01311803 call dword ptr [ebp-50h]

呼叫vcall

fooa::`vcall''

:0130c5eb jmp fooa::`vcall''

(1314c70h)

vcall定址虛表,找到實際函式位址

fooa::`vcall''

:01314c70 mov eax,dword ptr [ecx]

01314c72 jmp dword ptr [eax+4]

8 4類成員函式的指標與多型性

1 類成員函式的指標 2 類成員函式的指標陣列 3 指向類成員函式的指標的指標 1 類成員函式的指標 auto func1 com jia c 函式指標 int com p int,int com jia c函式指標 1 include 2 3class com4 13int jia int a,i...

多型中成員函式的特點

a.在多型中成員函式的特點 在編譯時期 參閱引用性變數所屬的類中是否有呼叫的方法。如果由編譯通過 在執行時期 參閱物件所屬的類中是否有呼叫的方法。簡單的總結就是 成員函式在多型呼叫時,編譯看左邊,執行看右邊。b.在多型中,成員變數的特點 無論編譯和執行,都參考左邊 引用型變數所屬的類 c.在多型中,...

指向成員函式的指標

指向成員函式的指標 取乙個非靜態成員函式的位址,如果該函式是nonvirtual,則得到的結果是它在記憶體中真正的位址。然而這個值也不是完全的,它也需要被繫結於某個class object的位址上,才能夠通過它呼叫該函式。所有的非靜態成員函式都需要物件的位址 以引數this指出 乙個指向成員函式的指...