C++无法从基类强制转换为派生类 (我用static_cast可以的) 然后我就不知道怎么回事了 ,有指针,有虚函数。

2024-12-19 22:47:05
推荐回答(2个)
回答1:

改成a = new B;就可以了;
dynamic_cast 是执行显式安全向下转换。只有当基类具有虚函数,且此时的基类指针具有正确的子类类型时,dynamic_cast才会返回正确的指针,否则返回0。安全性体现在这个地方,只能将基类指针向下转换为正确的子类类型。

至于你用static_cast可以实现这个功能,是因为static_cast是执行强制转换,是一种不安全的转换方式。跟你直接用B *b=(B*)a;没有区别。

回答2:

大哥。。你应该a= new B差不多。。。不然人家怎么去分配B里边的东西的内存。。你怎么能引用的到。。