C 虚函数和动态联编技术分析
2008-02-23 05:24:48来源:互联网 阅读 ()
虚拟函数亦是mfc编程的关键所在,mfc编程主要有两种方法:一是响应各种消息,进行对应的消息处理。二就是重载并改写虚拟函数,来实现自己的某些需要或改变系统的某些默认处理。
虚函数的地位是如此的重要,对他进行穷根究底,力求能知其然并知其所以然 对我们编程能力的提高大有好处。下面且听我道来。
多态性和动态联编的实现过程分析
一、基础略(限于篇幅,请参阅相应的c 书籍):
1、多态性:使用基础类的指针动态调用其派生类中函数的特性。
2、动态联编:在运行阶段,才将函数的调用和对应的函数体进行连接的方式,又叫运行时联编或晚捆绑。
二、过程描述:
1、编译器发现一个类中有虚函数,编译器会立即为此类生成虚拟函数表 vtable(后面有对vtable的分析)。虚拟函数表的各表项为指向对应虚拟函数的指针。
2、编译器在此类中隐含插入一个指针vptr(对vc编译器来说,他插在类的第一个位置上)。
有一个办法能够让您感知这个隐含指针的存在,虽然您不能在类中直接看到他,但您能够比较一下含有虚拟函数时的类的尺寸和没有虚拟函数时的类的尺寸,您能够发现,这个指针确实存在。
class cnovirtualfun { private: long lmember; public: long getmembervalue(); } class chavevirtualfun { private: long lmember; public: virtual long getmembervalue(); } cnovirtualfun obj; sizeof(obj) -> == 4; chavevirtualfun obj; sizeof(obj) -> == 8; |
3、在调用此类的构造函数时,在类的构造函数中,编译器会隐含执行vptr和vtable的关联代码,将vptr指向对应的vtable。这就将类和此类的vtable联系了起来。
4、在调用类的构造函数时,指向基础类的指针此时已变成指向具体的类的this指针,这样依靠此this指针即可得到正确的vtable,从而实现了多态性。在此时才能真正和函数体进行连接,这就是动态联编。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: C 研发中数据结构和算法的分离
下一篇: 深入解析C 中的三个修饰符
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash