c++基类指针转化为派生类指针是不安去的
因为基类包含的内容少于派生类,所以在使用基类指针转化成的派生类指针时候,派生类调用的东西在基类中没有的话,就会产生未知错误。
可以使用如下代码检验。
#include<iostream>
using 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<Base *>(&c);
pb = dynamic_cast<Base *>(&c);
if(pb == NULL)cout<<"派生类转化为基类错误"<<endl; // 不会运行
// pc = reinterpret_cast<Child *>(&b);
pc = dynamic_cast<Child *>(&b);
if(pc == NULL)cout<<"基类转化为派生类出现错误"<<endl; //会运行,基类转化派生类是一种不安全的行为
}
参考自:
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