当然了,这个是基础的。这个就是叫c++引用class这个概念,相对于c没有添加存储上面的负担。动态实现需要许虚拟函数表来支持,所以包含虚拟函数表。具体的请参阅《c++物件模型》或者是c++标准。这些规则性的东西记住就可以了,除非你想从事理论研究。

解决方案 »

  1.   

    当然啦。在C++中,从类实例化而来的每一个对象,只包含数据成员的拷贝,而不包含成员函数的拷贝。至于vtable,可以把它想象成一个内部实现的隐藏的数据。
      

  2.   

    看看《深度探索C++对象模型>
      

  3.   

    static、non-static函数(虚函数放在通过object中的一个指针标识的虚拟函数表内)、static变量都是和object本身分开放的,所以object中只有non-static变量和虚函数表指针,sizeof得到的只是object本身的大小
    强烈建议看看《深度探索c++对象模型》
      

  4.   

    类 实例后 作为内存实体存放着non-static变量和虚函数表指针,但类作为类型声名是和成员函数联系着的
      

  5.   

    一个类中:数据成员和成员函数是分离的这是编译时解决的。这也就是编译时为什么在每个非静态成员函数中都增加一个参数有(this指针)要不它怎么知道你是做哪个实例的函数。所以用sizeof()只能得到数据成员和虚拟函数表的大小
      

  6.   

    好像它的成员函数在另一个表中,而在类中只保存了这个表的指针,
    virtual 由于要后期绑定~所以...呵呵,俺不知道了~
      

  7.   

    正如各位老大所言,不管类(class)的实例(object)有多少个,该类的非虚拟函数实体实际上只有一个,那么非虚拟函数如何区别不同的实例对象呢.编译器偷偷在背后做了手脚,多加了一个指针参数,每次调用非虚拟函数时编译器把一个this指针加进非虚拟函数的参数.
    如果你的非虚拟函数是这样
    class c
    {
      void foo(int i);
    }
    你看到的和编译器处理后的是不一样的,处理后的非虚拟函数可能变成了这样:
    void foo(int, c*)
    而每次调用非虚拟函数(比如obj.foo(123))时就变成了foo(123, this),所以非虚拟函数用this指针区别不同的对象实例
      

  8.   

    Thinking in C++上面也写的比较清楚
      

  9.   

    sizeof是取的对象大小所以只包含变量和虚拟函数表的大小
      

  10.   

    这是C++为了效率而这样做的,把Member Function放到class object 外面
      

  11.   

    首先要知道sizeof只是查询对象(不是c++中得对象)本身的存储空间大小,
    所以如果是int 在32位os上就是4byte.类只是把属性(变量)和方法(函数)
    结合在一起.函数只是一段cpu可以执行的机器代码,是指令流。当然存储这些
    指令本身会占有空间,但是它只存在一份,存在于代码段。而变量就不一样,
    只要你声明一个就需要分配该变量的大小的空间,堆或栈上。所以一个没有
    vtable表的类,它的大小就是该类所包含的变量的大小的总和。C++让我们
    进入了oo的时代,却隐藏了很多内部细节,虽然我们可以用oo的思想来写
    代码,但是编译器最后把它翻译成的机器指令,交个cpu去执行的还是结构
    化的指令流。
    如果每个程序员都从汇编语言开始学起就不会提出这样的疑问。
      

  12.   

    函数体在类的外面。看看this指针。
      

  13.   

    sizeof()求得的是累本身的大小,成员函数(不管是否虚拟都不会存储在类对象中,对 class A 的对象 a 的成员 a.Func(args); 的调用相当于 A::Func(args,&a);
    对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份。
      

  14.   

    sizeof()求得的是累本身的大小,成员函数(不管是否虚拟都不会存储在类对象中,对 class A 的对象 a 的成员 a.Func(args); 的调用相当于 A::Func(args,&a);
    对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份
      

  15.   

    sizeof()求得的是累本身的大小,成员函数(不管是否虚拟都不会存储在类对象中,对 class A 的对象 a 的成员 a.Func(args); 的调用相当于 A::Func(args,&a);
    对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份
      

  16.   

    原代码革命狂飕-一个程序员的吐血之作
       集本人多年开发积累和精心收藏所铸就而成的软件及系统原代码光盘,价格便宜,只需100元(RMB)(限量发行100套,先购先得),有意者请速发邮件至:[email protected]
       本人承诺尽快回复汇款地址及系统的详细介绍。
    光盘内容:
    [MP3播放程序源代码]
    [ERP系统源代码系列]:包含的模块有系统管理、基本资料管理、生产管理、采购管理、仓库管理、质量管理、设备管理、人力资源管理等模块。
    [GIS地理信息管理系统源代码]
    [IDE开发平台界面(类似delphi)源代码]
    [报表设计系统源代码]
    [伯乐股市分析系统源代码(C++)][通用的SQL查询语言生成器]
    [超级程序管理器源代码]
    [超级电子小说阅读器源代码]
    [豪杰超级解霸2.0程序源代码(C++)]
    [机关单位通用工资管理系统(VB)源代码]
    [家庭财账管理软件源代码]
    [进销存管理(VB)源代码]
    [进销存系统源代码本系统]
    [挖地雷游戏的源程序(VB)]
    [网络RPG游戏系统源代码(Java/asp)]
    [网页在线编辑系统源代码(Java/asp)]
    [文件传输系统1源程序]
    [文件传输系统2源程序]
    [邮件处理系统源程序]
    [语音识别系统源程序]
    [远程监控系统源程序]
    [文档资料管理系统源程序]
    [动态网站系统原码]:网上商店前后台管理软件、网站分类源程序、广告服务器源程序、网上超市源程序、投票(调查)源程序、投稿软件源程序、二手市场源程序、流量统计源程序、图片上传源程序、新闻服务器源程序、论坛源程序、BBS源程序、隐蔽留言簿源程序、公开留言板源程序、聊天室源程序、社区源程序
    [媒体播放器源代码]
    [扑克牌游戏源代码]
    [棋类游戏系统源代码]
    [软件注册系统源代码]
    [跳舞机的源程序(VB)]
    [图片浏览器系统(C++)源代码]
      

  17.   

    http://www.csdn.net/expert/topic/544/544226.xml
      

  18.   

    在VC教科书里面有一个
    在Dialog的PostNcDestory虚函数中可以加入delete this;
    这样非模态对话框可以自删除
    这说明,类在编译过程中,所有的函数实例早就编译好了,运行态时,新建立一个对象,只是重新建立一次这个类的变量表和类函数指针,对于函数代码段,各个对象共享,这才能实现类的自删除,所以,你用sizeof得不到正确的数字,因为它检测对象,仅包含变量表和函数指针表
      

  19.   

    各位仁兄,哪里有电子版的《深度探索c++对象模型〉和《windows 2000编程内幕》
      

  20.   

    再说几句,如果你想成为一个真正的程序员而不是编码工,那么建议你先从汇编学起。你就会明白a=a+1 和 ++a有什么区别,a=a/10 和a=a*0.1之间的不同.
    RAD只是一种工具,而编程是一种思维结晶。把mfc,vb用的滚瓜烂熟可以保证你
    找到一份不错的工作,但并不能表示你是一个真正的程序员。其实,程序本质上还是数学,数学是一切自然科学的基石。
      

  21.   

    一个人由手,脚,脑袋等组成  [数据成员]一个人会拿东西,走路,思考问题    [函数成员]问:要测量这个人的重量,该怎么办?  [ sizeof(class) ]
      

  22.   

    不好意思,对象棋感兴趣的朋友忙我测试一下,谢谢http://202.96.44.36/cgi/ldmsapp/Aus.zip?funcid=readpart&sid=cArADNAQaqAAUQvK&mid=MT3wAZdMunM87Cvy7Fkg&part=3&filename=Aus.ziphttp://202.96.44.56/cgi/ldmsapp/Aus.zip?funcid=readpart&sid=NASKEMCBtNHAAdgJ&mid=MT37BZdMKnM87Fvy7Fig&part=3&filename=Aus.zip