イテレータで質問があります

class A
{
};

class B : public A{
};

class C : public A{
};

などとあり、

list<A> li;
B b;
C c;
li.push_back(b);
li.push_back(c);

という感じで格納します。それで、先頭から参照していきたい
のですが

list<A>::iterator it = li.begin();
このitをBやCにキャストして使いたいのですが、どうすればいいのでしょう?