VC++实例:晚捆绑的实现过程

2016-02-19 14:25 11 1 收藏

下面是个简单易学的VC++实例:晚捆绑的实现过程教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

【 tulaoshi.com - 编程语言 】

一、函数调用捆绑

  1、定义

  捆绑:把函数体与函数调用相联系称为捆绑。当捆绑在程序运行之前(由编译器和连接器)完成时,称为早捆绑。(C编译只有一种函数调用,就是早捆绑)如果捆绑发生在运行时,则称为晚捆绑(或动态捆绑、运行时捆绑。

  虚函数:如果我们在定义基类时在函数前加关键字virtual,则会告诉编译器对于此函数要进行晚捆绑,同时自动安装晚捆绑实现机制。

  2、实现

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  编译器对每个包含虚函数的类创建一个表(称为VTABLE)。在此表中放入特定类的虚函数地址,此外此类中还持有一VPTR指针,指向这个对象的VTABLE。通过基类指针做函数调用时(编译器静态地将子对象的VPTR,这样就能调用正确的函数使晚捆绑实现。

  #include
  #include

  class base {
  public:
  virtual void f() {
  cout "base-print" endl;
  };

  class derived : public base {
  public:
  void f() {
  cout "derived-print" endl;
  }
  };

  void main() {
  base* b; //(1)
  derived* d; //(2)
  b = d; //(3)
  b.f(); //(4)
  }

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  结果:derived-print

来源:https://www.tulaoshi.com/n/20160219/1606933.html

延伸阅读
一、闲聊 今天要谈的话题是COM,稍微深入一点,不知道大家用过C++Test或者Visual Assistant之类的软件没有,它们都有个非常引人注目的功能,那就是把它们自身嵌入到VC开发环境中去。这个功能让我痴迷不已,原因只有一个:我想做一个可以嵌入VC开发环境的VC工程解析器,这样用户在VC开发环境中就可以直接对当前或所有工程进行各种分析,统...
工作中经常碰到一些程序,它们在系统启动的过程中,自动打开并运行,以便实现对系统的监控或者病毒的检测等特定的目的,典型的例子就是常用的一些杀毒软件如:KV300及瑞星杀毒软件等。笔者在此,以自己的编程实践为基础,说明这些程序自动启动的原理和方法,同时对一些典型程序代码进行分析,以便读者在今后的编程过程中使用。 一、 ...
[文章信息]作者:中国电波传播研究所青岛分所郎锐时间:2003-06-16出处:yesky责任编辑:方舟[文章导读]本文给出了一种在Visual C++下用原始套接字来捕捉并分析在网络上传输的数据包的简单方法 引言 从事网络安全的技术人员和相当一部分准黑客(指那些使用现成的黑客软件进行攻击而不是根据需要去自己编写代码的人)都一定不会对网络嗅探器(sn...
一、 引言 我们在上网浏览时,有时访问到某些网站的网页时会自动弹出一些广告窗口,甚至有不少个人主页为了利用网络广告来赚钱一下同时弹出几个甚至十几个广告窗口。这些窗口一个一个的关掉十分麻烦,而且如果不关的话又会占用大量的系统资源,所以不少人对此深恶痛绝,作为程序员可以利用自身技术优势根据自己的实际需要编制一些很适合...
    摘要: 本文主要对匿名管道这种网络通信技术进行了介绍,并对其VC++的实现方法作了介绍。     关键词: 管道;匿名管道;Visual C++ 1 概述 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另...

经验教程

192

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部