В приведенном ниже коде 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" в памяти?