数组作为参数时,传入基类首地址和子类首地址的区别

    技术2022-05-19  23

    class A{public:    A() {};    ~A() {};    virtual void SetTest(){ printf("a/n");};    int m_iFirst;};class B :public A{public:    B() {};    ~B() {};    virtual void SetTest(){ printf("b/n");};    int m_iSecond;};void WanMeiTest(A* a, int iCount){    void * p = a + 1;    for(int i = 0; i < iCount; i++)    {        (a+i)->SetTest();    }}在调用的时候如果转入的是    A a;    B b;    int c = sizeof(a);    c = sizeof(b);    A aBase[2];    B* aChild =  new B[5];    B* pp = aChild + 1;    WanMeiTest(aChild, 5);结果会崩溃,原因在于WanMeiTest里面的内存偏移是按照A的大小来的,除非里面强转成B类型的指针


    最新回复(0)