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

  • 相关阅读:
    IT知识构架与操作系统简介
    read与for循环语句
    shell基础练习题
    shell 100以内加法
    shell
    python学习第一日
    shell脚本基本介绍
    bash的基本特性
    Linux习题
    Linux基本命令
  • 原文地址:https://www.cnblogs.com/findumars/p/5174328.html
Copyright © 2011-2022 走看看