C++ 类的存储空间及数据成员变量覆盖

来源:互联网 发布:spss19软件安装 编辑:程序博客网 时间:2024/05/22 10:28

问题:



代码:

类的定义代码:

class Empty {};class EmptyNonVirtual {  public:    EmptyNonVirtual() {}    ~EmptyNonVirtual() {}};class EmptyVirtual {  public:    EmptyVirtual() {}    virtual~EmptyVirtual() {}};class Base1 {  public:    Base1() {}    void print() {}};class Base2 {  public:    short m;    Base2() { m = 3; std::cout << "construct Base2.m=" << this->m << std::endl; }    void print() {   std::cout << "print           m=" << this->m << std::endl; }};class F1 : public Base2 {  public:    short m;    F1() { m = 4; std::cout << "construct    F1.m=" << this->m << std::endl; }};class F2A: public F1  {  public:    char* c;};class F2B : public F1  {  private:    char str;};

测试函数代码:

int test() {    //    std::cout << "Empty           size = " << sizeof (Empty) << std::endl;    std::cout << "EmptyNonVirtual size = " << sizeof (EmptyNonVirtual) << std::endl;    std::cout << "EmptyVirtual    size = " << sizeof (EmptyVirtual) << std::endl;    //    std::cout << "Base1 size = " << sizeof (Base1) << std::endl;    std::cout << "Base2 size = " << sizeof (Base2) << std::endl;    std::cout << "F1    size = " << sizeof (F1) << std::endl;    std::cout << "F2A   size = " << sizeof (F2A) << std::endl;    std::cout << "F2B   size = " << sizeof (F2B) << std::endl;    //    F1 f1;    f1.print();    std::cout << "f1.m=" << f1.m << std::endl;    //    return 0;}

演示结果:

d:\mylaf\project\vs2013\project_code\testvirtualinputv2\mainvirtualinputv2.ccEmpty           size = 1EmptyNonVirtual size = 1EmptyVirtual    size = 4Base1 size = 1Base2 size = 2F1    size = 4F2A   size = 8F2B   size = 6construct Base2.m=3construct    F1.m=4print           m=3f1.m=4


扩展:

0 0