类的多态问题求大神!!!!!

calss A
{
public:
int x;
virtual void update()=0;
};
class B :public A
{
int y;
public:
B(){y=1;}
void update(){cout<<"hello"<<endl;}
void cgr(int y){cout<<y<<endl;}
};
void main()
{
A *p=new B;

}
这时候 B的cgr()函数怎样才能使用?

A *p = new B; // 本来new了个B,然后向上转换为A

由于A不存在cgr函数,所以没办法使用到

除非向下转型为B

例如:

    A *p = new B;
    B *t = dynamic_cast<B*>(p);

    t->cgr(19);     // 就可以用了

把cgr函数也作为基类的虚函数