>>546
なんで答えてることを無視して同じ質問するの?
C++を知らないのかな? もう一回だけ説明するよ。
これでわからなければC++の入門サイトでも見てくれ。

リストから取り出す必要があるなら、何度も言うようにdynamic_castな。
void update(TaskManager &tm) {
 ClassB *b = dynamic_cast<ClassB *>(tm.getTask("ClassB"));
 if(b) b->moveB();
}

>たとえばクラスAとBがあったときクラスBだけがもつmoveBメソッドを呼びたかったと
で、こういう場合、クラスBとそれを使うクラスの間には何らかの関係があるわけだから、
クラスB(へのポインタ)を、『タスクリストに追加する前に』、それを必要とするクラスのメンバ変数にするんだよ。
class Hoge : public Task {
private:
 ClassB *b;
protected:
 void update(TaskManager &tm) {
  if(!b) {
   b = new ClassB();
   tm.addTask(b);
  }
  b->moveB();
 }
};
bの初期化のタイミング(Hogeのコンストラクタか、updateを最初に呼ばれたときか、
別にinit関数を作るか……)は好きにしてくれ。

以降のレスは呼んでる暇がないので、既にフォローされてたらごめん。