這幾天用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指出 乙個指向成員函式的指...