一个类有多个基类的内存布局

来源:互联网 发布:mac os x10.10.5下载 编辑:程序博客网 时间:2024/05/16 09:11

没有虚函数时

/// @file test_class.c/// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)#include <stdlib.h>#include <stdio.h>class CA {public:    CA() : iA(1) {}    int iA;};class CB : public CA {public:    CB() : iB(2) {}    int iB;};class CC : public CB {public:    CC() : iC(3) {}    int iC;};void fnTest(){    CC a;    /**    0018FEE4  01 00 00 00  .... ///< 顶层基类CA数据    0018FEE8  02 00 00 00  .... ///< 基类CB数据    0018FEEC  03 00 00 00  .... ///< 本类CC数据    */}int main(int argc, char *argv[]){    fnTest();    return 0;}

有虚函数时

/// @file test_class.c/// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)#include <stdlib.h>#include <stdio.h>class CA {public:    CA() : iA(1) {}    virtual ~CA() {}    int iA;};class CB : public CA {public:    CB() : iB(2) {}    virtual ~CB() {}    int iB;};class CC : public CB {public:    CC() : iC(3) {}    virtual ~CC() {}    int iC;};void fnTest(){    CC a;    /**    0018FEE4  1C 20 42 00  . B. ///< 本类CC虚函数表    0018FEE8  01 00 00 00  .... ///< 顶层基类CA数据    0018FEEC  02 00 00 00  .... ///< 基类CB数据    0018FEF0  03 00 00 00  .... ///< 本类CC数据    */}int main(int argc, char *argv[]){    fnTest();    return 0;}





0 0
原创粉丝点击