虽然我们正在打印bval
,但输出也显示dval
的值。编译器使用什么实际逻辑?我的预期输出为00000 00000
,但输出为00000 01010
。
#include <iostream>
using namespace std;
class base {
public:
int bval;
base() { bval = 0; }
};
class deri : public base {
public:
int dval;
deri() { dval = 1; }
};
void SomeFunc(base *arr , int size) {
for(int i = 0; i < size; i++, arr++)
cout << arr-> bval;
cout<<endl;
}
int main() {
base BaseArr[5];
SomeFunc(BaseArr, 5);
deri DeriArr[5];
SomeFunc(DeriArr, 5);
return 0;
}
答案 0 :(得分:3)
你在欺骗系统,并且正在“切片”。
由于deri
大于base
,当您执行arr++
时,指针仅向前推进base
个对象。
解决方案是拥有一个指针数组,并传递一个base **arr
,如下所示:
base *foo[5];
base BaseArr[5];
SomeFunc(BaseArr,5);
for(int i = 0; i < 5; i++)
{
foo[i] = &BaseArr[i];
}
SomeFunc(foo, 5);