sizeof (class )

tan625747 2010-05-18 04:17:37
class myClass1st
{
public:
void output (){printf("I am myClass1st\n");}
};

class myClass2nd
{
public:
void output(){printf ("I am myClass2nd\n");}
char cChr;
};

class myClass3rd
{
public:
virtual void output (){printf("I am myClass3rdt\n");}
};

class myClass4th
{
public:
virtual void output(){printf ("I am myClass4th\n");}
char cChr;
};

class myClass1stHerit:public myClass1st
{
public:
virtual void output (){printf("I am myClass1stHerit\n");}
char cChr;
};

class myClass3rdHerit:public myClass3rd
{
public:
virtual void output (){printf("I am myClass2rdHerit\n");}
virtual void input (){}
};

myClass1st c1st;
myClass2nd c2nd;
myClass3rd c3rd;
myClass4th c4th;
myClass1stHerit c1stHerit;
myClass3rdHerit c3rdHerit;

myClass1stHerit *pC1st = &c1stHerit;
myClass3rdHerit *pC3rd = &c3rdHerit;

void sex ()
{
int n1;
n1 = sizeof ( c1st);

int n2;
n2 = sizeof ( c2nd );

int n3;
n3 = sizeof ( c3rd);

int n4;
n4 = sizeof ( c4th);

int n1h;
n1h = sizeof ( c1stHerit );

int n3h;
n3h = sizeof ( c3rdHerit );

pC1st->output ();
pC3rd->output ();

}



...全文
212 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnylibra 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lylm 的回复:]
1.简单的说,有私有的成员或虚函数的类的对象才会分配空间,实在没有也会预留,就是1,因此sizeof (c1st),sizeof (c2nd)是1;
2.有虚函数的类的对象会保留一个指向虚函数表的指针,因此sizeof (c4th)=4
详细可参考深入理解C++对象模型
[/Quote]

为什么sizeof (c4th)=4?
里面有个虚函数 占4byte
还有个char 占1byte
然后对其的问题 我觉得应该占8byte的
plx0205 2010-05-18
  • 打赏
  • 举报
回复
字节对齐的问题,所以sizeof (c2nd) 是8。
pengzhixi 2010-05-18
  • 打赏
  • 举报
回复
成员函数不占对象内存的。所有对象共享一份成员函数代码。
SimonYeung 2010-05-18
  • 打赏
  • 举报
回复
inside C++ object
tan625747 2010-05-18
  • 打赏
  • 举报
回复
class myClass2nd
{
public:
void output(){printf ("I am myClass2nd\n");}
char cChr;
char c;
};

sizeof (c2nd) 为什么是2

class myClass2nd
{
public:
void output(){printf ("I am myClass2nd\n");}
char cChr;
int nc;
};

sizeof (c2nd) 为什么是8

意思是说
void output(){printf ("I am myClass2nd\n");}

不占空间?
pengzhixi 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tan625747 的回复:]
sizeof (c1st) 为什么是1?
sizeof (c2nd) 为什么是1?
sizeof (c4th) 为什么是4?
[/Quote]

如果我定义这样一个数组myClass1st array[10];你怎么来区别这些对象,这些对象能否拥有自己独立的地址呢?那么插入的这个字节就是这个作用。
only_delusion 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tan625747 的回复:]
sizeof (c1st) 为什么是1?
sizeof (c2nd) 为什么是1?
sizeof (c4th) 为什么是4?
[/Quote]

空类 或者只有函数的类,占用字节数为1,为了区别不空类 系统加的

所以sizeof (c1st) 是1
因为不是空类 只有一个char 所以sizeof (c2nd) 是1

sizeof (c4th)因为这个类用到了 虚函数,用到虚函数的地方会建立一张虚函数表 占用大小是四字节
lylm 2010-05-18
  • 打赏
  • 举报
回复
1.简单的说,有私有的成员或虚函数的类的对象才会分配空间,实在没有也会预留,就是1,因此sizeof (c1st),sizeof (c2nd)是1;
2.有虚函数的类的对象会保留一个指向虚函数表的指针,因此sizeof (c4th)=4
详细可参考深入理解C++对象模型
tan625747 2010-05-18
  • 打赏
  • 举报
回复
sizeof (c1st) 为什么是1?
sizeof (c2nd) 为什么是1?
sizeof (c4th) 为什么是4?
pengzhixi 2010-05-18
  • 打赏
  • 举报
回复
如果对sizeof的结果有一些疑问可以适当参考下深入理解C++对象模型

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧