现在的位置: 首页 > 综合 > 正文

一道微软2013实习生招聘题(c++,特别容易出错)

2013年01月13日 ⁄ 综合 ⁄ 共 734字 ⁄ 字号 评论关闭
一道微软2013实习生招聘题(c++,特别容易出错)

下面的这个程序输出结果是什么?

  1. #include <iostream>  
  2.   
  3. class A{  
  4. public:  
  5.     long a;  
  6. };  
  7.   
  8. class B : public A  
  9. {  
  10. public:  
  11.     long b;  
  12. };  
  13.   
  14. void seta(A* data, int idx)  
  15. {  
  16.     data[idx].a = 2;  
  17. }  
  18.   
  19. int _tmain(int argc, _TCHAR *argv[])  
  20. {  
  21.     B data[4];  
  22.   
  23.     for(int i=0; i<4; ++i)  
  24.     {  
  25.         data[i].a = 1;  
  26.         data[i].b = 1;  
  27.         seta(data, i);  
  28.     }  
  29.   
  30.     for(int i=0; i<4; ++i)  
  31.     {  
  32.         std::cout<<data[i].a<<data[i].b;  
  33.     }  
  34.   
  35.     return 0;  
  36. }  

分析: 第一个for循环第一次的时候,使得data[0].a=1,data[0].b=1,data[0].a=2,这个时候data[0].a=2,data[0].b=1,进入for第二次循环,使得data[1].a=1,data[1].b=1,data[1].a=2,这个时候data[1].b影响的是data[0].b,所以此时data[1].a=1,data[1].b=1,之前的data[0].b=2,类似分析.(注意:类A占用4个字节,类B占用8个字节).
结果输出:22221111

抱歉!评论已关闭.