以下のコードでは、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がpCと等しくないのですか?どちらもまだメモリ内の同じ「C」オブジェクトを指していますか?