zoukankan      html  css  js  c++  java
  • 一个类有多个基类的内存布局

    没有虚函数时

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. /// @file test_class.c  
    2. /// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)  
    3.   
    4. #include <stdlib.h>  
    5. #include <stdio.h>  
    6.   
    7. class CA {  
    8. public:  
    9.     CA() : iA(1) {}  
    10.     int iA;  
    11. };  
    12.   
    13. class CB : public CA {  
    14. public:  
    15.     CB() : iB(2) {}  
    16.     int iB;  
    17. };  
    18.   
    19. class CC : public CB {  
    20. public:  
    21.     CC() : iC(3) {}  
    22.     int iC;  
    23. };  
    24.   
    25. void fnTest()  
    26. {  
    27.     CC a;  
    28.   
    29.     /** 
    30.     0018FEE4  01 00 00 00  .... ///< 顶层基类CA数据 
    31.     0018FEE8  02 00 00 00  .... ///< 基类CB数据 
    32.     0018FEEC  03 00 00 00  .... ///< 本类CC数据 
    33.     */  
    34. }  
    35.   
    36. int main(int argc, char *argv[])  
    37. {  
    38.     fnTest();  
    39.     return 0;  
    40. }  

    有虚函数时

    [cpp] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. /// @file test_class.c  
    2. /// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)  
    3.   
    4. #include <stdlib.h>  
    5. #include <stdio.h>  
    6.   
    7. class CA {  
    8. public:  
    9.     CA() : iA(1) {}  
    10.     virtual ~CA() {}  
    11.     int iA;  
    12. };  
    13.   
    14. class CB : public CA {  
    15. public:  
    16.     CB() : iB(2) {}  
    17.     virtual ~CB() {}  
    18.     int iB;  
    19. };  
    20.   
    21. class CC : public CB {  
    22. public:  
    23.     CC() : iC(3) {}  
    24.     virtual ~CC() {}  
    25.     int iC;  
    26. };  
    27.   
    28. void fnTest()  
    29. {  
    30.     CC a;  
    31.   
    32.     /** 
    33.     0018FEE4  1C 20 42 00  . B. ///< 本类CC虚函数表 
    34.     0018FEE8  01 00 00 00  .... ///< 顶层基类CA数据 
    35.     0018FEEC  02 00 00 00  .... ///< 基类CB数据 
    36.     0018FEF0  03 00 00 00  .... ///< 本类CC数据 
    37.     */  
    38. }  
    39.   
    40. int main(int argc, char *argv[])  
    41. {  
    42.     fnTest();  
    43.     return 0;  
    44. }  

    http://blog.csdn.net/lostspeed/article/details/50559412

  • 相关阅读:
    shell数组
    正则表达式整数
    云计算的三种服务模式(IaaS/PaaS/SaaS)
    云计算通信协议
    LVS 核心组件和专业术语
    nginx
    【转】mybatis调用mssql有输入输出参数那种..
    OAuth2.0 在 SSO中的应用~
    Git 本地安装
    【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法
  • 原文地址:https://www.cnblogs.com/findumars/p/5174328.html
Copyright © 2011-2022 走看看