sizeof()求得的是累本身的大小,成员函数(不管是否虚拟都不会存储在类对象中,对 class A 的对象 a 的成员 a.Func(args); 的调用相当于 A::Func(args,&a); 对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份。
sizeof()求得的是累本身的大小,成员函数(不管是否虚拟都不会存储在类对象中,对 class A 的对象 a 的成员 a.Func(args); 的调用相当于 A::Func(args,&a); 对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份
sizeof()求得的是累本身的大小,成员函数(不管是否虚拟都不会存储在类对象中,对 class A 的对象 a 的成员 a.Func(args); 的调用相当于 A::Func(args,&a); 对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份
强烈建议看看《深度探索c++对象模型》
virtual 由于要后期绑定~所以...呵呵,俺不知道了~
如果你的非虚拟函数是这样
class c
{
void foo(int i);
}
你看到的和编译器处理后的是不一样的,处理后的非虚拟函数可能变成了这样:
void foo(int, c*)
而每次调用非虚拟函数(比如obj.foo(123))时就变成了foo(123, this),所以非虚拟函数用this指针区别不同的对象实例
所以如果是int 在32位os上就是4byte.类只是把属性(变量)和方法(函数)
结合在一起.函数只是一段cpu可以执行的机器代码,是指令流。当然存储这些
指令本身会占有空间,但是它只存在一份,存在于代码段。而变量就不一样,
只要你声明一个就需要分配该变量的大小的空间,堆或栈上。所以一个没有
vtable表的类,它的大小就是该类所包含的变量的大小的总和。C++让我们
进入了oo的时代,却隐藏了很多内部细节,虽然我们可以用oo的思想来写
代码,但是编译器最后把它翻译成的机器指令,交个cpu去执行的还是结构
化的指令流。
如果每个程序员都从汇编语言开始学起就不会提出这样的疑问。
对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份。
对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份
对于包含虚拟函数的类对象来说,增加了一个指向 vtable 的指针,即比数据成员的空间多用 4byte .虚拟函数的函数体仍然是一份
集本人多年开发积累和精心收藏所铸就而成的软件及系统原代码光盘,价格便宜,只需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++)源代码]
在Dialog的PostNcDestory虚函数中可以加入delete this;
这样非模态对话框可以自删除
这说明,类在编译过程中,所有的函数实例早就编译好了,运行态时,新建立一个对象,只是重新建立一次这个类的变量表和类函数指针,对于函数代码段,各个对象共享,这才能实现类的自删除,所以,你用sizeof得不到正确的数字,因为它检测对象,仅包含变量表和函数指针表
RAD只是一种工具,而编程是一种思维结晶。把mfc,vb用的滚瓜烂熟可以保证你
找到一份不错的工作,但并不能表示你是一个真正的程序员。其实,程序本质上还是数学,数学是一切自然科学的基石。