码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 类的大小计算

时间:2015-06-19 20:24:22      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

class A
{
};

class B
{
	char ch;
	virtual void func0()  {  }
};

class C
{
	char ch1;
	char ch2;
	virtual void func()  {  }
	virtual void func1()  {  }
};

class D : public A, public C
{
	int d;
	virtual void func()  {  }
	virtual void func1()  {  }
};

class E : public B, public C
{
public:
	int e;
	virtual void func0()  {  }
	virtual void func1()  {  }
	//子类里(E)没有实现func(),所以在E的子类里B的vfptr指向C的func()和E的func1()
	virtual void func123()  {  }
}


int main()
{
        //result=1,空类,大小为1
        cout << "A=" << sizeof(A) << endl;
        
        //result=8,4(vfptr,4)+4(char ch,内存对齐,4) = 8       
	cout << "B=" << sizeof(B) << endl; 
	  
	//result=8 , 4(vfptr,4)+4(char ch1,char ch2,内存对齐,4) = 8  
	cout << "C=" << sizeof(C) << endl;    
	
	//result=12, 4(类D的vfptr,4)+4(存在基类的char ch1,char ch2,内存对齐,4)+4(int d) = 12
	D obj_d; //首先VPTR指向的虚函数表中保存的是类D中的两个虚函数的地址
	cout << "D=" << sizeof(obj_d) << endl;    
	
	
	//result=20,(多继承)继承多少个有虚函数的类,就有多少个虚函数指针,也即这几个虚函数指针组成了自己的vfptr(编译器不再单独给自己的虚函数插vfptr)
	//4(B的vfptr)+4(char ch)+4(C的vfptr)+4(C中 char ch1,char ch2)+4(E 中int d) = 20
	//这个可以从调试下看出来
	E obj_e;
	obj_e.e = 123;
	cout << "E=" << sizeof(obj_e) << endl;    

        return 0;
}


C++ 类的大小计算

标签:

原文地址:http://my.oschina.net/Yuqingmu/blog/468947

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!