code output(not believable)

#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); 
} 

could you pls. explain why the code output is like below:
00000
01010

Because "arr++" assumes that the length of your array element is size of base, but actually it's size of deri.
Your deri looks like "bval,dval" in memory.