1.编译器会为每一个含有虚函数的类分配一个虚函数表,并有一个虚指针指向这个虚函数表; 2.sizeof()只能计算在栈上分配的空间,因此不会计算类静态成员的大小; 3.空类的大小是1个字节; class A{ public: int a; void Function(); }; class B{ public: int a; virtual void Function(); }; class C:public B{ public: char b; }; class D:public B{ public: virtual void Function2(); }; class E{ public: static void Function(); }; sizeof (A) = 4 (内含一个int,普通函数不占大小 ) sizeof (B) = 8 (一个int ,一个虚函数表指针) sizeof (C) =12 (一个int ,一个虚函数表指针,一个char ,再加上数据对齐) sizeof (D) = 8 (一个int ,一个虚函数表指针,多个虚函数是放在一个表里的,所以虚函数表指针只要一个就行了 ) sizeof (E) = 1 (static 函数不占大小 ,空类大小为1)