因为基类包含的内容少于派生类,所以在使用基类指针转化成的派生类指针时候,派生类调用的东西在基类中没有的话,就会产生未知错误。
可以使用如下代码检验。
#includeusing namespace std; class Base { public: // Base(): virtual void f1(){} }; class Child : public Base { public: virtual void f1(){} }; int main() { Base * pb; Child * pc; Base b; Child c; // dynamic_cast<> // pb = reinterpret_cast (&c); pb = dynamic_cast (&c); if(pb == NULL)cout<<"派生类转化为基类错误"< (&b); pc = dynamic_cast (&b); if(pc == NULL)cout<<"基类转化为派生类出现错误"< 参考自:
C++ 基类指针强制转换派生类指针可能会出现什么问题? - nkaifang的回答 - 知乎
https://www.zhihu.com/question/46848650/answer/106496485
(C++ 成长记录) —— C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast) - 赵萱婷的文章 - 知乎
https://zhuanlan.zhihu.com/p/368267441



