没有虚函数时





[cpp] ​​view plain​​​​copy​​​​ ​​​  


  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 plain​​​​copy​​​​ ​​​​ ​

 


  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. }