C++中各种空类以及继承空类后的sizeof大小
2011-09-28 11:49
381 查看
#include <iostream>
using namespace std;
class A1
{
};
class A2
{
};
class B1 : public A1
{
};
class B2 : public A1, public A2
{
};
class B3 : public virtual A1
{
};
class B4 : public virtual A1, public virtual A2
{
};
class B5 : public A1, public virtual A2
{
};
class C1 : public A1
{
char a;
char b;
};
class C2 : public virtual A1
{
char a;
char b;
};
int main(int argc, char *argv[])
{
cout << "sizeof(A1): " << sizeof(A1) << endl;
cout << "sizeof(B1 : A1): " << sizeof(B1) << endl;
cout << "sizeof(B2 : A1, A2): " << sizeof(B2) << endl;
cout << "sizeof(B3 : virtual A1): " << sizeof(B3) << endl;
cout << "sizeof(B4 : virtual A1, virtual A2): " << sizeof(B4) << endl;
cout << "sizeof(B5 : A1, virtual A2): " << sizeof(B5) << endl;
cout << "sizeof(C1 : A1): " << sizeof(C1) << endl;
cout << "sizeof(C2 : virtual A1): " << sizeof(C2) << endl;
return 0;
}
结果是:
sizeof(A1): 1
sizeof(B1 : A1): 1
sizeof(B2 : A1, A2): 1
sizeof(B3 : virtual A1): 4
sizeof(B4 : virtual A1, virtual A2): 4
sizeof(B5 : A1, virtual A2): 4
sizeof(C1 : A1): 2
sizeof(C2 : virtual A1): 8 //涉及到字节对其所以是8
由于virtual继承涉及到虚函数表(虚函数指针)所以sizeof为4
using namespace std;
class A1
{
};
class A2
{
};
class B1 : public A1
{
};
class B2 : public A1, public A2
{
};
class B3 : public virtual A1
{
};
class B4 : public virtual A1, public virtual A2
{
};
class B5 : public A1, public virtual A2
{
};
class C1 : public A1
{
char a;
char b;
};
class C2 : public virtual A1
{
char a;
char b;
};
int main(int argc, char *argv[])
{
cout << "sizeof(A1): " << sizeof(A1) << endl;
cout << "sizeof(B1 : A1): " << sizeof(B1) << endl;
cout << "sizeof(B2 : A1, A2): " << sizeof(B2) << endl;
cout << "sizeof(B3 : virtual A1): " << sizeof(B3) << endl;
cout << "sizeof(B4 : virtual A1, virtual A2): " << sizeof(B4) << endl;
cout << "sizeof(B5 : A1, virtual A2): " << sizeof(B5) << endl;
cout << "sizeof(C1 : A1): " << sizeof(C1) << endl;
cout << "sizeof(C2 : virtual A1): " << sizeof(C2) << endl;
return 0;
}
结果是:
sizeof(A1): 1
sizeof(B1 : A1): 1
sizeof(B2 : A1, A2): 1
sizeof(B3 : virtual A1): 4
sizeof(B4 : virtual A1, virtual A2): 4
sizeof(B5 : A1, virtual A2): 4
sizeof(C1 : A1): 2
sizeof(C2 : virtual A1): 8 //涉及到字节对其所以是8
由于virtual继承涉及到虚函数表(虚函数指针)所以sizeof为4
相关文章推荐
- c++面试常用知识(sizeof计算类的大小,虚拟继承,重载,隐藏,覆盖)
- C++三大特性之多态(二)---深度剖析各种虚继承虚函数以及虚表的内容存放
- 空类、含静态成员的类、普通类(不含虚函数、虚继承)的sizeof大小
- c/c++ struct的大小以及sizeof用法
- C/C++ 深入理解计算机各种类型大小(sizeof)
- c/c++ sizeof运算符详解以及对象大小
- C++空类以及没有成员变量的类的大小
- c/c++ sizeof运算符详解以及对象大小
- C++:C++ 空类的大小及相关继承类的大小
- C++空类以及没有成员变量的类的大小
- 【C++面向对象】类的大小以及虚继承
- C++ 06 继承与组合 (has-a is-a) 以及类大小的计算 虚基类对内存模型的影响(不考虑虚函数)
- c++空类实例大小不是0原因收藏
- c++空类实例大小不是0原因
- C/C++的sizeof()以及数据对齐
- C#调用C++编写的DLL函数, 以及各种类型的参数传递 z
- C++ 结构体中含有函数时sizeof结构体大小
- C++继承、虚继承、虚函数类的大小问题
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- C++空类实例大小不是0原因