C++虚函数的调用过程
来源:互联网 发布:java开源门户网站系统 编辑:程序博客网 时间:2024/06/03 09:56
C++编译阶段,没办法知道一个基类的指针或引用所指对象的类型,所以没办法通过这个指针判断调用的虚函数到底是谁的,所以只能通过查找虚函数表来找到函数的入口地址。
一个类,如果有虚函数,那么编译器在编译这个类的时候就会为它添加一个虚函数表,以及指向这个虚函数表的指针。继承这个基类的之类,也会新建一个虚函数表,如果没有重载,那么这个新的虚函数表中的函数指针就被拷贝为父类该函数的地址,否则为新的函数地址。编译器会将这些函数指针在虚函数表中按照基类中该函数出现的次序排列,子类中的虚函数表也将以这种方式排列。
每个有虚函数的类都有一个虚函数表指针pv,当通过指针或引用调用一个虚函数时,先通过pv找到虚函数表,然后根据这个虚函数在虚函数表中的偏移量来找到正确的函数地址,然后再CALL之。
虚函数表是在类之外的,一个类的size不包括虚函数表的大小。而虚函数指针则包含在类中,sizeof一个类则会包含一个虚函数表的指针。
0 0
- C函数的调用过程
- C函数的调用过程
- C函数调用过程
- C函数调用过程
- C函数调用过程
- 关于C函数的调用过程-栈帧
- C语言中函数的调用过程
- C函数调用过程分析
- c语言函数调用过程
- C语言函数调用过程
- c语言 调用函数过程
- 深入探索c/c++函数(3)---虚成员函数调用的基本过程
- 深入探索c/c++函数(3)---虚成员函数调用的基本过程
- 深入探索c/c++函数(3)---虚成员函数调用的基本过程
- 函数调用的过程
- 函数调用的过程
- 函数调用的过程
- 函数的调用过程
- java控制控制台里面输出的星号的移动
- (OK) digui-dir-indent.sh——递归
- “插入排序”算法Java语言的实现与详解
- android开发Eclipse首字母和.后面自动提示设置
- 剑指Offer--019-二叉树的镜像
- C++虚函数的调用过程
- 专题二 · 1008
- C++应用:简易五子棋游戏
- 【HDU 1797】【水题】Match the string
- 利用JQuery实现ajax异步刷新页面
- zigbee Zstack 开发主要步骤
- 数据时代的平台架构之闲言碎语
- ElasticSearch几个漏洞总结
- kettle中的列转行