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;
}
请问输出为什么是22221111?
因为A的大小是B的一半,所以实际上在
seta()
里的data[1].a
就变成了main()
中的data[0].b
,这是C++内存排布的问题。不过实际上你这样写程序是把对象B赋给了对象A,而不是将指向对象B的指针赋给了指向对象A的指针,这种写法本来就是错的。