C++ 这个程序的运行结果有一些问题,求助

#include

using namespace std;
class Base

{

public:

Base():data(count)

{
cout<<"Base-ctor"<<endl;
++count;
}
~Base()
{
cout<<"Base-dtor"<<endl;
--count;
}

static int count;

int data;

};
int Base::count;

class Derived : public Base
{
public:
Derived():data(count),data1(data)
{
cout<<"Derived-ctor"<<endl;
++count;
}
~Derived()
{
cout<<"Derived-dtor"<<endl;
--count;
}
static int count;
int data1;
int data;
};
int Derived::count=10;
int main()
{
cout<<sizeof(Base)<<endl;
cout<<sizeof(Derived)<<endl;

Base* pb = new Derived[3];
cout<<pb[2].data<<endl;
cout<<((static_cast<Derived*>(pb))+2)->data1<<endl;
delete[] pb;

cout<<Base::count<<endl;
cout<<Derived::count<<endl;
return 0;

}
.....................................................................................
pb[2].data为什么是10?

Base* pb = new Derived[3]; pb是父类指针指向子类对象。pb指针所属类型为Base,占4个字节,所以pb[0]移动到pb[2]偏移8个字节,pb[2].data实际指向第一个对象的派生类的成员变量data,地址变化如下图所示:图片说明

打印下data的地址,楼主是不是明白了点什么呢?

 #include   <iostream>   
using   namespace   std; 
class   Base   
{   
public:   
    Base():data(count)   
    {
        cout<<"Base-ctor" <<&data<<endl;
        ++count;
    }
    ~Base()
    {
        cout<<"Base-dtor"<<endl;
        --count;
    }   
    static int count;   
    int data;   
};
int Base::count;   
class Derived  : public Base
{
public:
    Derived():data(count),data1(data)
    {
        cout<<"Derived-ctor"<<&data << endl;

        ++count;
    }
    ~Derived()
    {
        cout<<"Derived-dtor"<<endl;
        --count;
    }
    static int count;
    int data1;
    int data;
};
int Derived::count=10;
int main()
{
    cout<<sizeof(Base)<<endl;
    cout<<sizeof(Derived)<<endl;

    Base* pb = new Derived[3];
    cout<<&pb[0].data << " "<< &pb[1].data << " "<<&pb[2].data <<endl;
    cout<<((static_cast<Derived*>(pb))+2)->data1<<endl;
    delete[] pb;

    cout<<Base::count<<endl;
    cout<<Derived::count<<endl;
    return 0;
}