改成a = new B;就可以了;
dynamic_cast 是执行显式安全向下转换。只有当基类具有虚函数,且此时的基类指针具有正确的子类类型时,dynamic_cast才会返回正确的指针,否则返回0。安全性体现在这个地方,只能将基类指针向下转换为正确的子类类型。
至于你用static_cast可以实现这个功能,是因为static_cast是执行强制转换,是一种不安全的转换方式。跟你直接用B *b=(B*)a;没有区别。
大哥。。你应该a= new B差不多。。。不然人家怎么去分配B里边的东西的内存。。你怎么能引用的到。。