/**
* @file classcode _sizeof.cpp
* @brief 1.空类的大小只有一个字节。
* 2.一个类中,成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间。
* 3.类中存在虚函数,虚函数本身并不占用类对象的内存空间,但是有一个指向虚函数的虚指针,即占用vptr的大小;并且无论存在多少虚函数,都只有一个vptr的大小
* 4.普通继承,派生类继承了所有基类的函数与成员,要按照字节对齐来计算大小
* 5.虚函数继承,不管是单继承还是多继承,都是继承了基类的vptr。(32位操作系统4字节,64位操作系统 8字节)!
* 6.虚继承,继承基类的vptr。
* @author major
* @version v1
* @date 2020-07-07
**/
#include<iostream>
using namespace std;
class A{}; //1
class B{
public:
char b;
static int c;
static int d;
static int f;
};//1
class C{
public:
char b;
virtual void fun() {};
};//16
class D{
public:
char b;
virtual void fun1() {};
virtual void fun2() {};
virtual void fun3() {};
virtual void fun4() {};
};//16
class E{
virtual void fun(){}
};//8
class F:public E{
};//8
class G{
virtual void fun1() {}
};//8
class H : virtual public E, virtual public G{
public:
virtual void fun2() {}
};//16
class I : virtual public E, virtual public G, virtual public D{
public:
virtual void fun3() {}
};//32
int main(){
//brief 1.空类的大小只有一个
cout << "debug: sizeof(A) = " << sizeof(A) << endl;
//brief 2.
cout << "debug: sizeof(B) = " << sizeof(B) << endl;
//brief 3.
cout << "debug: sizeof(C) = " << sizeof(C) << endl;
cout << "debug: sizeof(D) = " << sizeof(D) << endl;
//brief 4,5
cout << "debug: sizeof(E) = " << sizeof(E) << endl;
cout << "debug: sizeof(F) = " << sizeof(F) << endl;
//brief 6
cout << "debug: sizeof(G) = " << sizeof(G) << endl;
cout << "debug: sizeof(H) = " << sizeof(H) << endl;
cout << "debug: sizeof(I) = " << sizeof(I) << endl;
return 0;
}
原文:https://www.cnblogs.com/scboy/p/13260818.html