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

    xiaoxiao2021-03-25  94

    问题:

    代码:

    类的定义代码:

    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.cc Empty size = 1 EmptyNonVirtual size = 1 EmptyVirtual size = 4 Base1 size = 1 Base2 size = 2 F1 size = 4 F2A size = 8 F2B size = 6 construct Base2.m=3 construct F1.m=4 print m=3 f1.m=4

    扩展:

    转载请注明原文地址: https://ju.6miu.com/read-23850.html

    最新回复(0)