3虚函数表分析
来源:互联网 发布:伦敦大学学院专业 知乎 编辑:程序博客网 时间:2024/06/05 21:03
1.带有虚函数的类会多出四个字节的大小,这是一个指针的大小,这个指针的用途是指向虚函数表。
2.继承是虚函数表的顺序
#include<iostream>
usingnamespacestd;
classH
{
virtualvoidM()
{
cout <<"H::H" <<endl;
}
};
classA
{
//int num
virtualvoidg()
{
cout <<"A::g" <<endl;
}
private:
virtualvoidf()
{
cout <<"A::f" <<endl;
}
virtualvoidj()
{
cout <<"A::j" <<endl;
}
};
//函数中有虚函数的情况下,这时候多出来了一个指针用于指向虚函数表
classB :publicA//,public H
{
voidg()
{
cout <<"B::g" <<endl;
}
virtualvoido()
{
cout <<"B::o" <<endl;
}
virtualvoidh()
{
cout <<"B::h" <<endl;
}
};
typedefvoid(*Fun)(void);
voidmain()
{
cout <<sizeof(A) << endl;
cout <<sizeof(H) << endl;
cout <<sizeof(B) << endl;
Bb;
FunpFun; //定义一个函数指针
for (inti = 0;i < 5;i++)
{
pFun = (Fun)*((int *)*(int *)(&b) + i);
pFun();
}
cin.get();
}
运行结果:
3.分析
pFun = (Fun)*((int *)*(int *)(&b) + i);
A:分析*(int *)(&b),这里取的是b对象地址中的内容
B:(int *)*(int *)(&b)表示的是虚函数表的首地址
4.分析*(int *)(&b)
#include<iostream>
usingnamespacestd;
voidmain()
{
inta = 10;
cout << &a << endl;
cout << *(int *)(&a) <<endl;
cin.get();
}
运行结果:
- 3虚函数表分析
- 虚函数表分析
- 虚函数表深度分析
- 虚函数表深度分析- -
- C++虚函数表分析
- C++虚函数表分析
- C++虚函数表分析
- C++多态性分析之虚函数表
- 虚函数表的内存分析
- 类虚函数表原理实现分析
- 深入分析c++虚函数表
- 不全面的分析虚函数表
- OOP思想之虚函数表分析.
- C++虚函数分析[3]--常见问题汇总
- 分析虚函数
- 体会、分析虚函数
- 虚函数深层分析
- 类、虚函数分析
- hadoop新框架Yarn详解
- 直接插入排序(java实现)
- Java中ArrayList的遍历方式
- windows 下 vs2008 编译 OpenCV 库
- jQuery $.post $.ajax用法
- 3虚函数表分析
- 四种方案解决ScrollView嵌套ListView问题
- 删除ArrayList中重复元素
- Union Find
- 4常量表达式计算器
- HDOJ 4430 Yukari's Birthday
- 【English】Android -> Training -> Adding the Action Bar -> Adding Action Buttons
- header("Content-type: image/png"); 显示图片出错
- 折半插入排序(java实现)