#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
C++ 类成员赋值及作用域问题解析

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

被折叠的 条评论
为什么被折叠?



