クラスの継承とポインタ
子クラス(派生クラス)のポインタで、親クラス(基本クラス)のオブジェクトを指すことはできない。
class classB : public classA { public: void foo(){...} }; classA objA, *pA; classB objB, *pB;
この場合(classBが子クラス、classAが親クラス)、
pB = pA = pB; //ok pA = //ok
これはok
pA = pB = pA; //NG pB = //NG
これは出来ない。
また親クラスのポインタが子クラスのオブジェクトを指す場合、子クラスの中の親クラスのメンバの部分のみを指す。ただし親クラスのポインタをキャストすれば、子クラスのメンバにもアクセスできる。
pA =
((classB *)pA)->foo(); //ok