我的程序中有以下课程:
class base {
public:
int bval;
base() {
bval = 1;
}
};
class deri: public base {
int dval;
public:
deri() {
dval = 2;
}
};
还有一个函数f
,它接受指向类对象的指针base
和它所指向的数组的大小:
void f(base *arr, int size) {
for(int i=0; i<size; i++, arr++){
cout << arr->bval << " ";
}
cout << endl;
}
这是主要的:
int main() {
base a[5];
f(a, 5); // first call
deri b[5];
f(b, 5); // second call
}
第一次调用的输出是1 1 1 1 1
,这是正确的。
但是第二次调用的输出是1 2 1 2 1
,这对我来说是非常出乎意料的。似乎 的值dval
被打印出来,而不是函数内循环bval
的每第二次迭代。for
f
int dval2
此外,如果我在 class 中包含另一个私有数据成员,则每次执行它时都会deri
输出到第二次调用(因此 65535 看起来不像任何随机值)。1 2 65535 1 2
为什么箭头运算符会表现出这种行为?