当前位置: 首页 > news >正文

甘肃省城乡与建设厅网站首页/百度查询网

甘肃省城乡与建设厅网站首页,百度查询网,网站模板设计师要求,app维护费用一般多少钱C虚函数表指针在内存中的位置 多态就是多种形态,C的多态分为静态多态与动态多态。 静态多态就是编译器根据函数实参的类型判断出要调用哪个函数。比如函数重载和函数模板。动态多态依靠的是虚函数表和动态绑定机制,因为是在运行时根据对象的类型在虚函…

C++虚函数表指针在内存中的位置

多态就是多种形态,C++的多态分为静态多态与动态多态。

  • 静态多态就是编译器根据函数实参的类型判断出要调用哪个函数。比如函数重载和函数模板。
  • 动态多态依靠的是虚函数表和动态绑定机制,因为是在运行时根据对象的类型在虚函数表中寻找调用函数的地址来调用相应的函数,所以称为动态多态。

C++是通过虚函数表来实现运行时多态的。通常所有声明为virtual的虚函数地址都被存放于该表中。编译器会为每个存在虚函数的类对象插入一个vtpr(virtul function pointer),该vptr指向存放了虚函数地址的虚函数表vtbl,这样对象在调用虚函数的时候,第一步会先根据vptr找到vbtl,然后根据该虚函数在vbtl中的索引来进行调用,这样就实现了运行时多态功能。也就是说,虚函数表是在编译期间就已经生成了!

虚函数表指针可以看成类中的一个成员变量,也应该占用一定的字节数(一般是4个或者8个字节)。既然该指针是类的成员变量,那么它在类的对象内存中就会有一个位置,它有可能位于对象内存的开头处,也有可能位于对象内存的末尾处,具体在什么位置取决于编译器。现在写一个范例,范例的目的是验证一下虚函数表和虚函数表指针的存在。
看看如下类A的定义代码:

#include <iostream>class A
{
public:int i;                         //一个成员变量,4字节virtual void testfunc() { std::cout << "virtual function testfunc!" << std::endl; }     //一个简单的虚函数
};int main()
{A a;int ilen = sizeof(a);   //8:i占4字节,虚函数表指针占4字节(皆在x86平台下)
}

现在可以确定一件事情,a对象里有一个虚函数表指针(vptr),还有一个成员变量i,成员变量是跟着对象走的,也就是说是属于该对象的。可以以图 2.5 做参照。
在 main主函数中继续增加如下的代码,用以感知一下虚函数表指针的存在。注意观察代码中的注释:

char* pl = reinterpret_cast<char*>(&a);     //0x006ff730类型转换这属于硬转,a是对象首地址
char* p2 = reinterpret_cast<char*>(&(a.i)); //0x006ff734
if(pl== p2)  //说明a和a位置相同则成员变量在a对象内存的上面位置那么虚丽数表指针在下面位置
{cout << "虚函数表指针位于对象内存的末尾" << endl;
}
else
{cout << "虚函数表指针位于对象内存的开头" << endl;  //本条件会成立
}

执行起来,看一看结果

虚函数表指针位于对象内存的开头

上面的代码比较简单。不难看到,经过测试,虚函数表指针位于对象内存的起始(上面开头)位置。在 Linux 操作系统下编译并运行程序,得到的结果也相同(虚函数表指针也位于对象内存的起始位置)。

通过上面这个范例,感知到了虚函数表指针的存在,后续就要通过这个虚函数表指针来尝试调用一下虚函数。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

http://www.jmfq.cn/news/5045239.html

相关文章:

  • 安徽建站平台/郑州网络营销顾问
  • 温州微网站制作哪里有/关键词是什么意思
  • wordpress主题操作/seo零基础教学视频
  • 普通网站设计/全渠道营销管理平台
  • 桂林做旅游网站失败的网站/站长之家官网登录入口
  • 查看网站是什么语言做的/百度竞价在哪里开户
  • 做淘宝网站用什么软件/百度指数查询官网入口登录
  • 秦皇岛网站团队/企业推广宣传方式
  • 福州免费建站品牌企业/seo管理
  • wordpress 翻译文件/优化大师哪个好
  • 西安的电商网站设计/百度推广seo优化
  • wordpress邮箱链接修复/seo服务商排名
  • 网站设计上市公司/百度服务中心电话
  • 二手优品哪个网站做/推广平台怎么做
  • 提供网站推广公司电话/新媒体营销推广方案
  • 网站转化下降原因/网站做优化
  • 网站建设it职位/创建网站的流程是什么
  • 中山外贸营销网站建设/百度平台官网
  • 安徽基层党组织建设网站/阿里巴巴指数查询
  • wordpress 时光捕手/天津seo托管
  • 网站定制与模板开发/最快的新闻发布平台
  • wordpress首页调用/温州网站建设优化
  • 高端网站建设kgu/网络营销策划的基本原则是什么
  • asp网站有的打不开/亚马逊关键词优化软件
  • 用ip做网站/哪里的网络推广培训好
  • 网站网页设计公司有哪些/西安seo技术
  • 电商网站建设网/新闻头条最新消息摘抄
  • 微信商城登录平台/短视频seo
  • 个体户做网站是怎么备案/做推广哪个平台好
  • 慈溪机械加工网/seo公司网站