#include <iostream>
using namespace std;
class CBase {
public:
virtual int b(){
return 0;
}
};
class CDerived: public CBase {
int b(){
return 0;
}
};
int main(void)
{
//知识点1
//子类转基类没问题,因为空间变小,反之不行
CBase b; CBase* pb;
CDerived d; CDerived* pd;
pb = dynamic_cast<CBase*>(&d); // ok: derived-to-base
//知识点2
//注释掉CBase和CDerived的b函数,那么下面的语句编译不过
//基类指针转子类指针需要基类为多态基类
pd = dynamic_cast<CDerived*>(&b); // wrong: base-to-derived
//知识点3
// 如果b指向的对象不是一个完整的对象,那么转换后,pd仍然可能会空
//解引用之前需要对pd进行判断 if (0 == pd)
}
关于C++ dynamic_cast转换需要引起重视的问题
最新推荐文章于 2022-11-10 18:02:22 发布