当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>C++对象筹划及多态实现的摸索</b>[VC/C++编程]

赞助商链接



  本文“<b>C++对象筹划及多态实现的摸索</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

前言

本文通过察看对象的内存筹划,跟踪函数调用的汇编代码.解析了C++对象内存的筹划情形,虚函数的履行方法,以及虚担当,等等.

写这篇文章源于我在论坛上看到的一个贴子.有人问VC利用了哪类方法来实现虚担当.当时我写了一点代码想考证一下,后果发现情形比我想象的要复杂.所以我就干脆认真把相关的问题都过了一遍,并记录本钱文.

我关于C++对象模子的知识主要来自于Lippman的书《Inside the C++ Object Model》,中译版为候捷翻的《深度摸索C++对象模子》,中英版我都看过,不过我还是举荐中译版,因为中译版的确翻得不错,并且候捷加入了很多的图,并改正了原版中的一些错误.

我所利用的编译器是VC7.1,文中的代码我都在VC7.1上考证通过.假如在其他的编译器下运行需求作呼应的调整,即便是VC7.0和VC6也是如此.差别编译器产生的汇编代码也不一样,假如你在差别编译器上编译文中的代码生成出的汇编代码和我所列出的差别,也层出不穷.假如你想在其他的编译器上考证这些代码请自行做呼应的窜改.

别的我发现VC7.1在实现虚担当时所用的办法和Lippman在书中提到的微软所用的办法差别,不过当时还没有VC7.1.风趣的是,Lippman在写那本书时,是在迪斯尼工作,应当是做和三维影片的渲染软件相关的事.而目前他已经到了微软,相信应当是主导VC7.1编译器的计划工作.别的值得一提的是Herb,此人是C++尺度委员会的一员,写过量本C++方面的经典书籍,目前也已经加入了微软.固然我不是微软的“粉丝”,但关于VC不得不关注.VC8.0的beta版也已经出来了.

在后文中可以看到列出的很多汇编代码,有些明显效率很低.这大概是因为我没有翻开编译器的优化开关.翻开优化开关,设置差别的优化选项后,编译器大概产生出高效得多的汇编代码.有爱好的朋友可以自行试试,并和文中列出的汇编代码做一下对比.

为了便于解析和察看对象的内存筹划,我把代码生成时的结构成员对齐选项设置为1字节,默许为8字节.假如你在自己的工程下编译文中的代码,请做一样的设置.因为我写了一些函数打印对象中的筹划信息,假如对象选项不是1字节,运行这些代码会呈现指针非常错误.

文中所列出的代码可以从附件中下载到.代码所用到的宏的语义及参数阐明,和代码中每一个类的简单描写可以在附录中找到.

普通类对象的内存筹划

首先我们从普通类对象的内存筹划开始.C000为一个空类,定义以下:

struct C000

{

};

运行以下代码打印它的大小及对象中的内容.

PRINT_SIZE_DETAIL(C000)

后果为:

The size of C000 is 1

The detail of C000 is cc


  以上是“<b>C++对象筹划及多态实现的摸索</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .