C++相談室2

このエントリーをはてなブックマークに追加
365デフォルトの名無しさん
質問です
クラス A がクラス B へのポインタを持ち、クラス B の機能を
利用するのですが、クラス A の派生クラス AA はクラス B の
機能では満足できないのでクラス B の派生クラス BB を利用します.

クラス A ではクラス B へのポインタを設定する関数
SetProxy( B * pB ) を宣言しているのですが、
クラス AA はクラス BB の機能を利用するため SetProxy のポインタを
クラス BB 以下の派生クラスに限定したいのですが
クラス A の SetProxy インタフェースを維持しつつ、
クラス AA の SetProxy ではクラス BB 以下の派生クラスへのポインタを
限定して受け取るように設計するにはどうしたら良いのでしょうか?
あと、初心者なのでこういう設計になれていないので
良い設計がありましたら、教えてほしいのですが…。

class B {
public: void doHogeHoge();
};

class BB : public B {
public: void doFooBar();
};

class A {
protected: B * PointerB;
public: void SetProxy( B * pB) { PointerB = pB; } };

class AA : public A {
protected: BB * PointerBB;
public: void SetProxy( BB * pBB) { PointerBB = pBB; } };
???