使用sizeof计算虚继承的类对象的空间大小

#include <iostream>   
using namespace std;  

class A 
{
};

class B
{
};

class C:public A,public B
{
};

class D:virtual public A
{
};

class E:virtual public A,virtual public B
{
};

class F
{
public:
	int a ;
	static int b ;
};

int F::b = 10 ;

int main()
{
	cout<<"sizeof(A) = "<<sizeof(A)<<endl ;
	cout<<"sizeof(B) = "<<sizeof(B)<<endl ;
	cout<<"sizeof(C) = "<<sizeof(C)<<endl ;
	cout<<"sizeof(D) = "<<sizeof(D)<<endl ;
	cout<<"sizeof(E) = "<<sizeof(E)<<endl ;
	cout<<"sizeof(F) = "<<sizeof(F)<<endl ;
	
	return 0 ;
}


解析:

(1)代码第35行,由于A是空类,编译器会安插一个char给空类,用来标记它的每一个对象。因此其大小为1个字节

(2)代码第36行,类B大小和A相同,都是1个字节

(3)代码第37行,类C是多继承A和B,其大小仍然为1个字节

(4)代码第38行,类D是虚继承自A,编译器为该类安插一个指向父类的指针,指针大小为4.由于此类有了指针,编译器不会安插一个char了。因此其大小是4个字节。

(5)代码第39行,类E虚继承自A并且也虚继承自B,因此它有指向父类A的指针与父类B的指针,加起来大小为8个字节

(6)代码第40行,类F含有一个静态成员变量,这个静态成员的空间不在类的实例中,而是像全局变量一样在静态存储区中,被每一个类的实例共享,因此其大小是4个字节。

答案为:

sizeof(A) = 1 
sizeof(B) = 1
sizeof(C) = 1
sizeof(D) = 4 
sizeof(E) = 8 
sizeof(F) = 4 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值