Simple: that code doesn't compile. So what you are running is the output from a different set of code.
oint
is not a known type for starters.
But if it did, it wouldn't do what you think it should, and the reason is this:
void SomeFunc(base *arr,int size)
{
for(iont i=0;i<size;i++,arr++)
cout<<arr->bval;
deri DeriArr[5];
SomeFunc(DeriArr,5);
When you pass DeriArr to SomeFunc, it arrives as a Base* - which is perfectly valid, as the name of an array is a pointer to the first element in the array, and Deri is derived from Base, so a pointer to a Deri is a valid pointer to a Base.
But then you increment the pointer:
arr++
as part of the for loop.
As far as SomeFunc is concerned, arr is a pointer to a Base, so ++ adds the size of a Base in bytes to the pointer. But Deri is bigger than Base - it has an extra integer. So incrementing the pointer doesn't point to the next Deri element, it points to the next Base element and ends up half way through the Deri instance. And lo: you get the result you see.