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

本文详细解析了一道微软2013实习生招聘中的C++编程题,重点讲解了类继承与成员赋值的原理及常见错误分析,通过实例代码演示了正确实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一道微软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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值