现在的位置: 首页 > 综合 > 正文

C++一个类所占字节问题讨论

2013年09月13日 ⁄ 综合 ⁄ 共 836字 ⁄ 字号 评论关闭

测试环境 windows xp SP3,vc60

1.空类占字节数

 

class Father  
{
};
int main(){
cout<<sizeof(Father)<<endl;
return 0;
}


 

 

输出:1

分析:空类之所以要占一个字节,应该是为了能够定义该类的不同对象(具体如何操作现在还不太明白)。

2.有一个成员变量的类占字节数

class Father  
{
private:
int a;
};
int main(){
cout<<sizeof(Father)<<endl;
return 0;
}

输出:4

分析: 因为在32位机器上int类型占4个字节。

3.有一个普通成员函数

 

class Father  
{
public:
	char * TFunc();
};
char * Father::TFunc()
 {
  return "Father";
  }
int main(){
cout<<sizeof(Father)<<endl;
return 0;
}

输出:1

分析:这应该跟对类函数的存储方式有关系(待补充)。

4.有一个虚函数

class Father  
{
public:
	virtual char * TFunc();
};
char * Father::TFunc()
 {
  return "Father";
  }
int main(){
cout<<sizeof(Father)<<endl;
return 0;
}

输出:4

分析:这是因为Father类建立了一个__vfptr指针,指向一个虚函数表,其第一个元素就是指向TFunc()的指针,所以所占空间大小为4.(疑问:这个时候难道就能将不同的对象区分了吗,就能不要那1个字节吗?

如下图所示:所以在类中有两个虚函数时,sizeof(Father)的大小同样为4.那是因为根据MSDN的描述:The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.所以此时用sizeof计算得到的只是头指针的大小(一个指针占4个字节)。

待续...

 

抱歉!评论已关闭.