sizeof一个类的时候,都什么会被计算?静态成员会被计算进来么?如果这是一个子类,它的父类成员会被计算么?
#include <iostream> using namespace std; class Base1 { public: int b1; static int a1; virtual void f() { cout << "Base1::f" << endl; } virtual void g() { cout << "Base1::g" << endl; } void h() { cout << "Base1::h" << endl; } }; class Base2 { public: int b2; virtual void f() { cout << "Base2::f" << endl; } virtual void g() { cout << "Base2::g" << endl; } virtual void h() { cout << "Base2::h" << endl; } }; class Base3 { public: int b3; virtual void f() { cout << "Base3::f" << endl; } virtual void g() { cout << "Base3::g" << endl; } virtual void h() { cout << "Base3::h" << endl; } }; class Derive : public Base1, public Base2, public Base3 { public: int d1; virtual void f() { cout << "Derive::f" << endl; } virtual void g1() { cout << "Derive::g1" << endl; } }; typedef void(*Fun)(void); int main() { Base1 temp1; Base2 temp2; Base3 temp3; Derive d; printf("%d ",sizeof(temp1)); printf("%d ",sizeof(Base1)); printf("%d ",sizeof(d)); return 0; }
sizeof一个类的时候,非静态成员变量、有虚函数的话虚表指针会都计算进去,静态成员变量,还有成员函数都是不会被计算的。如果是子类,那么父类中的成员也会被计算的。
可以看出静态成员变量是独立于类的对象,只跟类名绑定的,虚函数表是跟类的对象绑定的