# Class size calculation First of all, let's make a summary, and then we will give an actual example - The size of the empty class is 1 byte - In a class, the virtual function itself, member functions (including static and non-static) and static data members do not occupy the storage space of class objects - For classes containing virtual functions, no matter how many virtual functions there are, there is only one virtual pointer, the size of VPTR - Ordinary inheritance, derived class inherits all the functions and members of the base class, and the size is calculated according to byte alignment - Virtual function inheritance, whether single inheritance or multi inheritance, inherits the VPTR of the base class(32 bit operating system 4 bytes, 64 bit operating system 8 bytes)! - Virtual inheritance inherits the VPTR of the base class ## 1.Rule 1 ```c++ /** * @file blackclass.cpp * @brief The size of the empty class is 1 byte * @author 光城 * @version v1 * @date 2019-07-21 */ #include using namespace std; class A{}; int main() { cout< using namespace std; class A { public: char b; virtual void fun() {}; static int c; static int d; static int f; }; int main() { /** * @brief 16 */ cout< using namespace std; class A{ virtual void fun(); virtual void fun1(); virtual void fun2(); virtual void fun3(); }; int main() { cout< using namespace std; class A { public: char a; int b; }; /** * @brief * char a * int b * short a * long b * 根据字节对齐4+4=8+8+8=24 */ class B:A { public: short a; long b; }; class C { A a; char c; }; class A1 { virtual void fun(){} }; class C1:public A1 { }; int main() { cout< using namespace std; class A { virtual void fun() {} }; class B { virtual void fun2() {} }; class C : virtual public A, virtual public B { public: virtual void fun3() {} }; int main() { /** * @brief 8 8 16 The derived class inherits multiple virtual functions and inherits the VPTR of all virtual functions */ cout<