[面经] 访问C++虚函数表

来源:互联网 发布:mac pdg转pdf 编辑:程序博客网 时间:2024/06/16 16:13
#include <cstdio>class A{public:    virtual void a(void)    {        printf("A:a(%p)\n", this);    }private:    virtual void b(void)    {        printf("A:b(%p)\n", this);    }};class B : public A{public:    virtual void c(void)    {        printf("B:c(%p)\n", this);    }private:    virtual void d(void)    {        printf("B:d(%p)\n", this);    }};class C : public B{public:    virtual void e(void)    {        printf("C:e(%p)\n", this);    }private:    virtual void f(void)    {        printf("C:f(%p)\n", this);    }};int main(void){    A a;    B b;    C c;    // void ***ppp_avf = (void ***)&a;    void ***ppp_bvf = (void ***)&b;    void ***ppp_cvf = (void ***)&c;    printf("a, b, c: %p, %p, %p\n", &a, &b, &c);    // for (int i = 0; NULL != (*ppp_avf)[i]; ++i) {    //     ((void (*)(void))(*ppp_avf)[i])();    // }    // printf("\n");    for (int i = 0; NULL != (*ppp_bvf)[i]; ++i) {        ((void (*)(void *))(*ppp_bvf)[i])(&b);    }    printf("\n");    for (int i = 0; NULL != (*ppp_cvf)[i]; ++i) {        ((void (*)(void *))(*ppp_cvf)[i])(&c);    }    printf("\n");    return 0;}

原创粉丝点击