#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;
}
[面经] 访问C++虚函数表
最新推荐文章于 2024-05-13 04:38:02 发布
本文通过一个具体的C++程序示例,展示了虚函数表的工作原理。从类A继承到类C的过程中,详细分析了每个类的虚函数及其在内存中的布局情况。通过遍历虚函数表并调用所有虚函数,直观地展示了不同类对象如何实现多态行为。
846

被折叠的 条评论
为什么被折叠?



