приведение типов с виртуальными функциями

В приведенном ниже коде pC == pA:

class A
{
};

class B : public A
{
public:
    int i;
};

class C : public B
{
public:
    char c;
};

int main()
{
    C* pC = new C;
    A* pA = (A*)pC;

    return 0;
}

Но когда я добавляю чисто виртуальную функцию к B и реализую ее в C, pA != pC:

class A
{
};

class B : public A
{
public:
    int i;
    virtual void Func() = 0;
};

class C : public B
{
public:
    char c;
    void Func() {}
};

int main()
{
    C* pC = new C;
    A* pA = (A*)pC;

    return 0;
}

Почему pA не равно ПК в этом случае? Разве они оба не указывают на один и тот же объект "C" в памяти?

7
задан mfontanini 3 April 2012 в 22:05
поделиться