函数多态性带来的指针的变化

本文深入探讨了C++中类成员赋值的过程和作用域的使用,通过实例展示了如何正确地为类成员赋值,并强调了在不同作用域下赋值的注意事项,帮助开发者避免常见错误。

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

#include <iostream>  

class A{  
public:  
  long a;  
};  

class B : public A  
{  
public:  
  long b;  
};  

void seta(A* data, int idx)  
{  
  data[idx].a = 2;  
}  

int main(int argc, char *argv[])  
{  
  B data[4];  

  for(int i=0; i<4; ++i)  
  {  
    data[i].a = 1;  
    data[i].b = 1;  
    seta(data, i);  
  }  

  for(int i=0; i<4; ++i)  
  {  
    std::cout<<data[i].a<<data[i].b;  
  }  

  return 0;  
}  

Which is the right answer?

A. 11111111

B. 12121212

C. 11112222

D. 21212121

E 22221111

B data[4];连开64个字节空间 传进函数后强转成A*也就是加法操作每次移动的是sizeof(A)也就是8个字节 而B本身是16个字节 就相当于四次把前两个B的32个字节的值全都赋成了2 于是22221111




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值