コード:
class B {
public:
B () : b(++bCounter) {}
int b;
static int bCounter;
};
int B::bCounter = 0;
class D : public B {
public:
D () : d(0) {}
int d;
};
const int N = 10;
B arrB[N];
D arrD[N];
int sum1 (B* arr) {
int s = 0;
for (int i=0; i<N; i++)
{
s+=arr[i].b;
}
return s;
}
int sum2 (D* arr) {
int s = 0;
for (int i=0; i<N; i++)
{
s+=arr[i].b+arr[i].d;
}
return s;
}
質問:
これらは何を返しますか:
1)sum1(arrB)
=?
2)sum1(arrD)
=?
3)sum2(arrD)
=?
これらをコンパイルして実行すると、55、65、および155が得られますが、その理由はわかりません。arrBでは変数はb=1,2,3、...、10であり、arrDではb = 11.12、...、20であるため、sum1(arrB)=55と答えることになります。どこでもd=0であるため、11 + 12 + .. + 20の合計のようにsum1(arrD)= 155、およびsum2(arrD)=155。
私は何が間違っているのですか?