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

电子商务网站建设分析论文工人找活平台

电子商务网站建设分析论文,工人找活平台,wordpress新建字段,网页制作软件中文免费版​ 最近在逛B站的时候发现有候捷老师的课程#xff0c;如获至宝。因此#xff0c;跟随他的讲解又复习了一遍关于C的内容#xff0c;收获也非常的大#xff0c;对于某些模糊的概念及遗忘的内容又有了更深的认识。以下内容是关于虚函数表、虚函数指针#xff0c;而C中的动态…​ 最近在逛B站的时候发现有候捷老师的课程如获至宝。因此跟随他的讲解又复习了一遍关于C的内容收获也非常的大对于某些模糊的概念及遗忘的内容又有了更深的认识。以下内容是关于虚函数表、虚函数指针而C中的动态绑定实现和这两个内容是分不开的。虚函数表、虚指针​ 当一个类在实现的时候如果存在一个或以上的虚函数时那么这个类便会包含一张虚函数表。而当一个子类继承并重载了基类的虚函数时它也会有自己的一张虚函数表。当我们在设计类的时候如果把某个函数设置成虚函数时也就表明我们希望子类在继承的时候能够有自己的实现方式如果我们明确这个类不会被继承那么就不应该有虚函数的出现。下面是某个基类A的实现class ​ 从下图中可以看到该类在内存中的存放形式对于虚函数的调用是通过查虚函数表来进行的每个虚函数在虚函数表中都存放着自己的一个地址而如何在虚函数表中进行查找则是通过虚指针来调用在内存结构中它一般都会放在类最开始的地方而对于普通函数则不需要通过查表操作。这张虚函数表是什么时候被创建的呢它是在编译的时候产生否则这个类的结构信息中也不会插入虚指针的地址信息。 以下例子包含了继承关系class 以上三个类在内存中的排布关系如下图所示对于非虚函数三个类中虽然都有一个叫 func2 的函数但他们彼此互不关联因此都是各自独立的不存在重载一说在调用的时候也不需要进行查表的操作直接调用即可。由于子类B和子类C都是继承于基类A因此他们都会存在一个虚指针用于指向虚函数表。注意假如子类B和子类C中不存在虚函数那么这时他们将共用基类A的一张虚函数表在B和C中用虚指针指向该虚函数表即可。但是上面的代码设计时子类B和子类C中都有一个虚函数 vfunc1因此他们就需要各自产生一张虚函数表并用各自的虚指针指向该表。由于子类B和子类C都对 vfunc1 作了重载因此他们有三种不同的实现方式函数地址也不尽相同在使用的时候需要从各自类的虚函数表中去查找对应的 vfunc1 地址。对于虚函数 vfunc2两个子类都没有进行重载操作所以基类A、子类B和子类C将共用一个 vfunc2该虚函数的地址会分别保存在三个类的虚函数表中但他们的地址是相同的。从上图可以发现在类对象的头部存放着一个虚指针该虚指针指向了各自类所维护的虚函数表再通过查找虚函数表中的地址来找到对应的虚函数。对于类中的数据而言子类中都会包含父类的信息。如上例中的子类C它自己拥有一个变量 m_data1似乎是和基类中的 m_data1 重名了但其实他们并不存在联系从存放的位置便可知晓。关于动态绑定在设计了以上三个类之后我们就要开始对它们进行使用。int ​ 假如在程序中分别创建两个对象 a 和 ba的创建是通过将b强制转化为类A得来的。对于 b.vfunc1() 的调用应该没有太的疑问它所调用的就是类B中的 vfunc1。而对于 a.vfunc1() 的调用它虽然是强制转化后的结果但并不能改变它是一个类A对象的事实因此这里调用的便是类A中的 vfunc1也就是上图中显示绿色的函数。int ​ 将程序改写成以上内容pa 是一个类A的指针但它指向的是一个类B的对象。在使用pa调用 vfunc1 的时候程序发现pa是一个指针并且现在正在调用一个虚函数叫做 vfunc1这时通过 pa-vptr 这个虚指针到类B的虚函数中上图的B vtbl找对应的虚函数地址找到该地址以后就用相应的虚函数来进行调用也就是调用上图所示的 B::vfunc1()。 pa是类A的指针为什么查找的是类B的虚函数表 只要某一个类X包含虚函数无论是它的父类或者它本身拥有那么这个类的对象都会包含一个虚指针vptr至于vptr要指向哪张表取决于类X它本身是否含有虚函数。此处类B中存在虚函数那么它就会拥有自己的一张虚函数表。pa指向的是一个类B的对象因此 p-vptr 指代的是类B中虚指针所以它查找的是类B的虚函数表 如何从虚函数表中查找到 vfunc1 的地址 虚函数表中的内容是在编译的时候确定的通过以下方式进行查找 (* p-vptr[n] )(p) 或者 (* (p-vptr)[n] )(p)它的解读是通过类对象指针p找到虚指针vptr再查找到虚函数表中的第n个内容并将他作为函数指针进行调用调用时的入参是p(式子中的第二个p)而这个p就是隐藏的this指针这里的n也是在编译的时候确定的。int ​ 再将程序修改成以上内容对于 p2-vfunc1() 的调用和上文所述一致它调用的是 B::vfunc1 函数。而对于 p1-vfunc1() 的调用同样通过上面的方法可知 p1-vptr 它所指向的是类A的虚函数表因此它调用的是 A::vfunc1 函数。​ 通过以上内容我们可以知道在使用基类指针调用虚函数的时候它能够根据所指的类对象的不同来正确调用虚函数。而这些能够正常工作得益于虚指针和虚函数表的引入使得在程序运行期间能够动态调用函数。动态绑定有以下三项条件要符合使用指针进行调用指针属于up-cast后的调用的是虚函数与动态绑定相对应的是静态绑定它属于编译的时候就确定下来的如上文的非虚函数他们是类对象直接可调用的而不需要任何查表操作因此调用的速度也快于虚函数。参考https://www.bilibili.com/video/av48240648?p1
http://wiki.neutronadmin.com/news/88615/

相关文章:

  • 企业网站建设三个原则15个常见关键词
  • vs网站开发如何发布初二信息课网站怎么做
  • php网站开发都需要什么软件青岛济南网页设计公司
  • 做t恤的网站深圳外包网站制作公司
  • 济南网站建设优化购物网站的建立
  • 浏览器打开网站wap建站程序合集
  • 做网站怎么上传图片网站设计的优点和缺点
  • 网站如何做h5动态页面什么是网络营销代理
  • 建设厅网站密码找回做网站竞价没有点击率
  • 电子商务网站建设与管理基础关于网站开发的外文书籍
  • 做html网站搜索框代码网络营销有哪些方式
  • 网站编程器做网站基本
  • 深圳网站搭建多少钱公司网站宣传
  • 石家庄做网站seo建设游戏网站需要什么设备
  • 淘宝刷单网站建设网站pv uv
  • 网站页面布局和样式设计现在推广引流什么平台比较火
  • 网站如何做的看起来高大上wordpress 配置模板
  • 河北建设厅网站登陆怎么找附件wordpress激活邮件
  • 福鼎市建设局网站南京市玄武区建设局网站
  • asp网站新闻置顶企业网站需要什么功能
  • 网站外包一般多少钱啊wordpress音频播放器插件
  • 网站标题的关键字怎么写网站建设图片轮播
  • 上海网站建设就q479185700顶上视频链接生成器在线制作
  • 大连住房和城乡建设部网站免费简历模板在线下载
  • 网站制作 语言选择怎么做网页设计类型与风格
  • 优设网站广西建设工程质量安全监督网站
  • 12306网站为什么做那么差京东网上商城跟京东是一家吗
  • 去哪个网站做兼职教育培训机构网站模板
  • 爱站网关键词查询本地一键搭建wordpress
  • 郑州网站建设公司 艾特医学网站建设风格