首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

请问包含虚函数的类的空间占用

2012-02-16 
请教包含虚函数的类的空间占用class A{private:int apublic:virtual void func(){ }}class B : public A

请教包含虚函数的类的空间占用
class A
{
private:
int a;
public:
virtual void func(){ }
};
class B : public A 
{
private:
int b;
public:
virtual void func(){ } 
virtual void func1(){ } 
}; 
void main(void)
{
cout << "sizeof(A) = " << sizeof(A) << endl;
cout << "sizeof(B) = " << sizeof(B) << endl;

结果:
sizeof(A) = 8
sizeof(B) = 12
我想问的是为什么B的返回是12,不是8?


[解决办法]
有虚函数, 只增加一个 vptr
[解决办法]
virtual void func1(){ } <-- 增加了(32位系统) int32 4字节
[解决办法]
因为B从A继承了int a,自己又定义了int b,所以比A多4。
[解决办法]
首先B继承自A类。
所以A类的数据不论是私有保护还是公有的数据 在它的子类B中都是被遗传的 只是其子类B无法直接访问遗传自父类的私有的数据. 所以例子中A类的private成员int a;在子类B中也是存在的 ,占了B类的4字节位置。而对于虚函数 ...类中一旦存在虚函数成员(不论多少个,只要存在虚函数),那么就会多出,而且只多出一个地址指针(通常在构造的时候会被放在类数据的首位)指向虚函数列表,这个指针的大小是4字节 . 所以A和B类内都含有虚函数所以虚函数的因素在A与B上没有导致数据大小的差异。
真正导致差异的是B类又添加了一个成员int b; 多出了4字节.
 

热点排行