Przypisywanie tablicy klasy pochodnej do wskaźnika klasy bazowej

#include <iostream> 
class B { 
public: 
 B () : b(bCounter++) {} 
int b; 
static int bCounter;  
}; 
int B::bCounter = 0; 
class D : public B { 
public: 
D () : d(bCounter) {} 
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; 
} 
int main() { 
    std::cout << sum1(arrB) << std::endl; 
    std::cout << sum1(arrD) << std::endl; 
    std::cout << sum2(arrD) << std::endl; 
    return 0; 
}

Problem jest w linii 2 funkcji głównej. Spodziewałem się, że gdy funkcja sum1 () zostanie wywołana z argumentem arrD (który jest tablicą pochodnych obiektów klas), po prostu „odetnie” D :: d, ale w tym przypadku zmienia porządek w arrD, i sumowanie przebiega następująco: 10 + 11 + 11 + 12 + 12 + 13 + 13 + 14 + 14 + 15 Wydaje się, że na przemian występują pola b i d arrD [i], i powinno być sumowanie tylko pól b . Czy ktoś może wyjaśnić dlaczego? Z góry dziękuję.

questionAnswers(3)

yourAnswerToTheQuestion