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

莆田 网站建设广东手机网站建设报价

莆田 网站建设,广东手机网站建设报价,上海中高风险地区名单最新,系部网站建设管理方案指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么? 1、无论指针类型怎么转,类对象内存没有发生任何变化,还是vfptr指向虚函数表,下面是成员变量,这在编译阶段就已经确定好了&#xff1b…

指向派生类的基类指针、强转为 void* 再转为基类指针、此时调用虚函数会发生什么?

1、无论指针类型怎么转,类对象内存没有发生任何变化,还是vfptr指向虚函数表,下面是成员变量,这在编译阶段就已经确定好了;
在这里插入图片描述

2、运行时,会根据vfptr找到vftable,然后确定类型为派生类(RTTI运行时类型识别),这是调用虚函数是查表来调用的,在编译的时候派生类的虚函数早就把基类的虚函数给覆盖了,调用的肯定是派生类的虚函数
3、整个调用过程如下
编译器进行编译成汇编代码时,先看到show函数,show函数是虚函数,虚函数编译时就不能直接call show了,而是通过bfptr找到虚函数标,大概过程如下
mov ecx dword ptr[p3] //找到vfptr
mov eax dword ptr[ecx] //把vfptr指向的地址,也就是vftable[0]的地址给寄存器eax,eax里存放的是派生类show函数的地址
call eax //调用派生类的show

以上三句汇编才是虚函数产生多态的核心

在这里插入图片描述

#include <iostream>
#include <memory>#include<iostream>
using namespace std;//基类
class Base
{
public:virtual void show(){cout << "base ::show" << endl;}
public:int ma;
};
class Derived:public Base
{
public:virtual void show(){cout << "Derived ::show" << endl;}
public:int mb;
};int main()
{Base* p1 = new Derived;p1->show();void* p2 = (void*)p1;Base* p3 = (Base*)p2;p3->show();return 0; ;
}

在这里插入图片描述

http://www.yayakq.cn/news/598942/

相关文章:

  • 国内精品网站建设泗洪做网站公司
  • 解决国外网站很慢wordpress用户验证失败
  • 几百块钱可以做网站吗iis7.0搭建网站
  • 成品网站w在线观看免费开源的个人网站系统
  • 建网页放到什么网站上广西茶叶网站建设
  • 做我的狗漫画网站企业网站建设公司怎么做
  • 自己网站建设做阿里巴巴英文网站
  • 公司网站制作有哪些注意事项国外设计网站pinterest网址
  • 温州网站建设方案推广动态数据库网站
  • 怎么搭建钓鱼网站杭州企业网站定制
  • 个体可以做几个网站黄金软件免费下载
  • 个人网站备案icp制作网页难吗
  • 怎么做类似清风dj网站wordpress 作品集网站
  • 深圳外贸网站搭建国内有做外汇的正规网站吗
  • 网站开发需要文章写的好吗石狮app网站开发
  • 境外网站海口市住房和城乡建设局网站
  • asp 网站源码南京百度关键字优化价格
  • 专业做家居的网站有哪些专业做家电经销的网站
  • 广东网站建设建站模板个人网站制作论文
  • 浅谈中兴电子商务网站建设深圳宝安住房和建设局网站
  • 东莞网站推广哪里好建设网站技术公司电话号码
  • 文章网站建设东莞横沥网站制作
  • wordpress 微站适合权重小的网站做的专题
  • 商务型网站有哪些装潢公司网站设计与制作
  • 戴南网站建设网站建设合同doc
  • 动易网站模板wordpress微博挂件
  • 网站建设栏目设置上市公司排名
  • 瑞安塘下做网站的公司章丘营销型网站建设
  • 医疗 企业 网站建设怎样建设商城网站
  • 做网站推广哪家好佛山优化企业网站排名平台