美文网首页
C++:子类在重写虚函数时,堆栈中虚表,重写函数存储的情况

C++:子类在重写虚函数时,堆栈中虚表,重写函数存储的情况

作者: dissolvache | 来源:发表于2020-05-30 00:30 被阅读0次

    ···

    #include <stdlib.h>

    #include <windows.h>

    #include <stdio.h>

    class A

    {

    public:

    int x;

    virtual void test()

    {

    printf("aaaa /n");

    }

    };

    class B : public A

    {

    public:

    int b;

    void test()

    {

    printf("bbbb/n");

    }

    };

    void Test(A& a)

    {

    a.test();

    }

    int main(int argc, char* argv[])

    {

    B b;

    Test(b);

    return 0;

    }

    ···

    存入虚表 虚表地址存储情况

    lea eax,[ebp-och] 将对象b的首地址放入eax,push eax 将eax(b的首地址即b函数的虚表地址)放入ebp+8的位置。

    函数情况 函数堆栈情况

    进入函数压栈等操作后,ebp+8为b虚表地址,从虚表找到b的重写函数的地址放入edx,call调用【edx】

    相关文章

      网友评论

          本文标题:C++:子类在重写虚函数时,堆栈中虚表,重写函数存储的情况

          本文链接:https://www.haomeiwen.com/subject/yzsqcxtx.html