#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转换需要引起重视的问题
最新推荐文章于 2024-10-15 21:22:27 发布
本文深入探讨了C++中基类转子类及子类转基类的动态类型转换机制,通过实例展示了如何使用dynamic_cast进行类型转换,并阐述了转换过程中需要注意的关键点。

932

被折叠的 条评论
为什么被折叠?



