对类 sizeof

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一个类的时候,非静态成员变量、有虚函数的话虚表指针会都计算进去,静态成员变量,还有成员函数都是不会被计算的。如果是子类,那么父类中的成员也会被计算的。

 可以看出静态成员变量是独立于类的对象,只跟类名绑定的,虚函数表是跟类的对象绑定的

原文地址:https://www.cnblogs.com/huhuuu/p/3452831.html