zoukankan      html  css  js  c++  java
  • 成员函数指针有多态的效果吗?

    这几天用bind的时候想到一个问题,成员函数指针有多态的效果吗?

    我一直以为没有,测试之后发现是可以的,我对成员函数指针的理解有误

    虚成员函数指针的调用过程是先调用函数vcall,vcall根据this寻址虚函数表然后去调用实际的函数,对于虚表上的每个索引x的函数都是使用vcall{x}进行调用

    所以同一虚函数的父类和基类的成员函数指针的值是一样的,他们都指向vall{x}

    所以成员函数指针是能够实现多态的

    我在http://www.cnblogs.com/mightofcode/archive/2013/03/03/2939439.html里面关于成员函数指针的部分写的有点问题

    注意:这里说的是成员函数指针的调用过程,跟直接调用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'{4}':
    0130C5EB  jmp         fooA::`vcall'{4}' (1314C70h)
      
    vcall寻址虚表,找到实际函数地址
    fooA::`vcall'{4}':
    01314C70  mov         eax,dword ptr [ecx]  
    01314C72  jmp         dword ptr [eax+4]  
  • 相关阅读:
    换零钞
    空心菱形
    生成回文数
    机器人数目
    胡同门牌号
    七星填数
    阶乘位数
    打印数字
    平方末尾
    数位和
  • 原文地址:https://www.cnblogs.com/mightofcode/p/2991823.html
Copyright © 2011-2022 走看看