C++类大小和静态成员/方法

2017-08-11  本文已影响33人  第八区

类大小计算

示例
#include <iostream>

using namespace std;

/**
 * 8=4(x)+4 (vptr)
 */
class A {
public:
    int x;

    virtual void func() {

    }
};

/**
 * 16=4(x)+4 (vptr)+4(y)+4(vbPtr)
 */
class B : virtual public A {
public:
    int y;

    virtual void funcB() {

    }
};


class B1 : virtual public A {
public:
    int z;

    virtual void funcB1() {

    }
};

/**
 * 16=4(x)+4 (vptr)+4(y)+4(B vbPtr)+4(A vbptr)+4(m)
 */
class C : virtual public B {
    int m;

    virtual void funcC() {

    }
};

/**
 * 16=4(x)+4 (vptr)+4(y)+4(B vbPtr)+4(A vbptr)+4(m)+4(z)+4(B1 vbptr)
 */
class D : public B, public B1 {
    int n;

    virtual void funcD() {

    }
};

int main() {
    A a;
    B b;
    C c;
    D d;
    cout << "sizeof(A)=" << sizeof(a) << endl;
    cout << "sizeof(B)=" << sizeof(b) << endl;
    cout << "sizeof(C)=" << sizeof(c) << endl;
    cout << "sizeof(D)=" << sizeof(d) << endl;
    return 0;
}

运行结果:

sizeof(A)=8
sizeof(B)=16
sizeof(C)=24
sizeof(D)=28

静态成员变量

示例
//C.h
class C {
private:
    int a;
public:
    static int b;
};
//C.cpp
#include "C.h"
int C::b=10;
int main() {
    cout<<C::b<<endl;
    C::b=100;
    cout<<C::b<<endl;
    return 0;
}

静态方法

上一篇 下一篇

猜你喜欢

热点阅读