22 November 2007

クラスの継承とポインタ

子クラス(派生クラス)のポインタで、親クラス(基本クラス)のオブジェクトを指すことはできない。

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